我已经在我自己的项目上进行了一段时间的单元测试,并希望得到关于何时停止测试的反馈。请考虑以下示例。
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;
}
}
在调用构造函数时,我可以想到以下测试。
鉴于这些是不同的排列,我会说它们都是有效的场景。虽然可以删除一些重复,但事实仍然是需要大量的测试来涵盖构造函数的创建。如果我有SetBibble()/ SetHooch方法,我将进入主要的重复。
我的问题是:您将测试上述多少,如何处理排列测试,何时编写测试的成本超过测试值。
答案 0 :(得分:2)
我会测试实际的逻辑而不会被测试的吸气剂和制定者带走。通常,在测试对象之间的交互过程中会覆盖getter和setter。我看到可能需要测试的示例中的唯一内容是抛出IllegalArgumentExceptions,并且格式化工作正常。 (考虑到你的属性允许成员重置为null,测试抛出异常并没有很多价值。)
单元测试应该对开发人员主要有用,他们并不是为了让管理层满意或满足代码覆盖率指标(尽管有很多地方可以解决这类问题)。我不会花时间测试不相关的事物的不同组合。
答案 1 :(得分:2)
为什么要测试不相关参数之间的相互作用?您已在问题中命名了许多重复测试。我认为你有:
ArgumentNullException
测试null bibble ArgumentNullException
测试null hooch ArgumentNullException
测试空hooch Bibble
属性由ctor Hooch
属性由ctor BibbleHooch
属性返回预期值这6项测试完全涵盖了班上所有可能的场景。
如果我有SetBibble()/ SetHooch方法,我会遇到重大的重复。
如果没有必要,请不要公开setter。首选您的类的最小接口 - 您将需要更少的测试,逻辑将更简单。