赋予单元测试以个性
时间:2020-03-06 15:00:29 来源:igfitidea点击:
我一直在思考单元测试以及如何提高单元测试的可读性。我想为什么不给单元测试中的类一个字符以阐明它们的作用。
这是我编写的一个简单的单元测试:
[TestFixture] public class when_dave_transfers_money_from_wamu_account_to_the_woodforest_account { [Test] public void should_increase_the_amount_in_woodforest_account_when_transaction_successfull() { Dave dave = new Dave(); Wamu wamu = new Wamu(); wamu.Balance = 150; wamu.AddUser(dave); Woodforest woodforest = new Woodforest(); woodforest.AddUser(dave); FundTransferService.Transfer(100, wamu, woodforest); Assert.AreEqual(wamu.Balance, 50); Assert.AreEqual(woodforest.Balance, 100); } }
这是Dave类:
/// <summary> /// This is Dave! /// </summary> public class Dave : User { public Dave() { FirstName = "Dave"; LastName = "Allen"; } }
单元测试名称明确地达到了目的。但是,也许我想更深入地挖掘,并在创建Dave时将Wamu和Woodforest帐户分配给Dave。问题在于它将不再具有可读性,因为我将不得不使用索引值来引用该帐户。
我们对如何使其更具可读性有何想法?
解决方案
测试夹具中的私有助手方法怎么样
private Dave GetDave_With_Wamu_And_Woodforest_AccountsHookedUp()
创建Dave时,可以将Dave添加到Wamu和Woodforest帐户中,如下所示:
public Dave() { FirstName = "Dave"; LastName = "Allen"; // add accounts for Dave Wamu wamu = new Wamu(); wamu.AddUser(this); Woodforest woodforest = new Woodforest(); woodforest.AddUser(this); }
帐户被添加到Dave继承的User对象中的List集合中。
当我们尝试实例化Wamu实例时,它不应该抛出WamuNotFoundException吗?
这是运行测试的另一种方法:
[Test] public void should_increase_the_amount_in_woodforest_account_when_transaction_successfull() { Dave dave = new Dave(); // we know that dave has wamu and wooforest accounts dave.WamuAccount("Wamu").Balance = 150; FundTransferService.Transfer(100, dave.WamuAccount("Wamu"), dave.WoodforestAccount( "Woodforest")); Assert.AreEqual(50, dave.WamuAccount("Wamu").Balance); Assert.AreEqual(100, dave.WoodforestAccount("Woodforest").Balance); }