赋予单元测试以个性
时间: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);
}

