理想情况下,为生产代码中的每个类编写一个测试类。在测试类中,所有测试方法可能不需要相同的前提条件。我们如何解决这个问题?我们是否为此创建单独的测试类?
我建议创建单独的方法来包装必要的前提条件设置。不要将这种方法与传统的测试设置混淆。例如,假设您为收据提供者编写了测试,该提供者将搜索存储库并根据某些验证步骤返回收据。我们可能最终得到:
这里有几个条件:收据存在/不存在,收据按日期无效,未提交收据。我们的满意之路是默认设置(例如通过传统的测试设置完成)。然后,快乐路径测试将像(一些C#伪代码)一样简单:
[Test]
public void GetReceipt_ReturnsReceipt()
{
receiptProvider.GetReceipt("701").IsNotNull();
}
现在,对于特殊情况,我们只需编写微小的专用方法即可安排我们的测试环境(例如,安装依赖项),以便满足条件:
[Test]
public void GetReceipt_ReturnsNull_WhenReceiptDoesntExist()
{
ReceiptDoesNotExistInRepository("701")
receiptProvider.GetReceipt("701").IsNull();
}
[Test]
public void GetReceipt_ReturnsNull_WhenExistingReceiptHasInvalidDate()
{
ReceiptHasInvalidDate("701");
receiptProvider.GetReceipt("701").IsNull();
}
您最终将获得一些额外的辅助方法,但是您的测试将更容易阅读和理解。当逻辑比简单的“是/否”设置复杂时,这特别有用:
[Test]
public void GetReceipt_ThrowsException_WhenUncommittedReceiptHasInvalidDate()
{
ReceiptHasInvalidDate("701");
ReceiptIsUncommitted("701");
receiptProvider.GetReceipt("701").Throws<Exception>();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句