内部DatabaseInteraction
导致异常的功能应该抽象到另一个实现接口的类。然后可以模拟此接口以用于单元测试。
例如:
public class BalanceCalculator
{
readonly IDatabaseInteraction _databaseInteraction;
public BalanceCalculator(IDatabaseInteraction databaseInteraction)
{
_databaseInteraction = databaseInteraction;
}
public Decimal CalcBalance()
{
//Stuff I want to test
_databaseInteraction.Interaction();
return 5.0D; //This is the value I want to have tested.
}
}
然后在单元测试中,可以这样做(使用起订量):
[Test]
public void CheckValueTest()
{
Mock<IDatabaseInteraction> mockInteraction = Mock<IDatabaseInteraction>();
BalanceCalculator balanceCalculator = new BalanceCalculator(mockInteraction.Object);
decimal result = balanceCalculator.CalcBalance();
Assert.AreEqual(5.0D, result);
}
被IDatabaseInteraction
嘲笑为什么都不做,因此不可能发生异常或任何不相关的功能。
有关更多信息,请阅读Inversion of Control,它对可测试性非常有用。