我已经对自己的项目进行了一段时间的单元测试,并希望获得有关何时停止测试的反馈。考虑以下示例。
public class Foo
{
public object Bibble { get; private set; }
public string Hooch { get; private set; }
public string BibbleHooch { get { return string.Format("{0},{1}", Bibble, Hooch); } }
public Foo(object bibble, string hooch)
{
if (bibble == null)
throw new ArgumentNullException("bibble");
if (string.IsNullOrEmpty(hooch))
throw new ArgumentNullException("hooch");
Bibble = bibble;
Hooch = hooch;
}
}
这些是我在调用构造函数时能想到的以下测试。
- 一个空圣经抛出
- 一个空的钩子抛出
- 一个空的钩子抛出
- 一个有效的圣经但空的 hooch 抛出
- 一个空的圣经,但有效的方式抛出
- bibble 和 hooch 都设置为 null throws
- 一个有效的圣经和 hooch 不要扔
- 有效的 bibble 和 hooch 意味着 Bibble 和 Hooch 不应为空
- 有效的 bibble 和 hooch 意味着 BibbleHooch 不应为空
- 一个 hooch x 应该与 Foo.Hooch 相同
- a bibble y 应该与 Foo.Bibble 相同
- x 的 hooch 和 y 的 bibble 意味着 Foo.BibbleHooch 应该与 xy 相同
鉴于这些是不同的排列,我会说它们都是有效的场景。当然可以删除一些重复,但事实仍然是需要大量测试来涵盖构造函数的创建。如果我有 SetBibble() / SetHooch 方法,我就会陷入严重的重复。
我的问题是:你会测试以上多少,你如何处理排列的测试,编写测试的成本何时超过测试的价值。