【发布时间】:2010-02-18 23:58:19
【问题描述】:
我最近真的开始接触 TDD,在阅读了 Kent Beck 关于测试驱动开发的书之后,我仍然有很多关于测试设计的问题。
我目前遇到的一个问题是使用 Mock 对象。下面以一个非常简单的生成报告为例:
public string MakeFinancialReport()
{
return sys1.GetData() + sys2.GetData() + sys3.GetData();
}
报告必须包含页眉、正文和页脚。所以快速测试一下报告中是否存在这些标题:
public void TestReport()
{
string report = MakeFinancialReport();
Assert.IsTrue(report.Contains("[Title]") && report.Contains("[Body]") && report.Contains("[Footer]"));
}
为了隔离该方法,我想我会模拟掉 sys1、sys2 和 sys3 调用。现在,如果它们都是模拟物,我还有什么要测试的?此外,当我模拟它们时,为什么我必须告诉模拟对象它们将被调用一次并返回 X 等。它是否不仅仅是一个黑盒测试,并且 MakeFinancialReport 可以进行尽可能多的调用它想建立报告?
我对这么一个小问题感到困惑,我不确定我错过了什么。我认为 Mocking 会带走可测试的代码,对于大多数简单的方法来说,剩下的测试没有任何帮助。
【问题讨论】: