Unit testing 单元测试。何时停止
我已经在我自己的项目上做了一段时间的单元测试,希望得到关于何时停止测试的反馈。考虑下面的例子。Unit testing 单元测试。何时停止,unit-testing,Unit Testing,我已经在我自己的项目上做了一段时间的单元测试,希望得到关于何时停止测试的反馈。考虑下面的例子。 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 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;
}
}
当调用构造函数时,我可以想到以下测试
- 一个空的bibble抛出
- 一个空的胡说八道
- 空空荡荡的胡说八道
- 有效的bibble但无效的hooch抛出
- 无效的bibble但有效的hoow抛出
- bibble和hooch都设置为空抛出
- 一个有效的bibble和hooch不能扔
- 有效的bibble和hooch表示bibble和hooch不应为null
- 有效的bibble和hooch表示BibbleHooch不应为null
- hooch x应该与Foo.hooch相同
- bibble y应该和Foo.bibble一样
- x的hooch和y的bibble表示Foo。BibbleHooch应与xy相同
我的问题是:你会测试上面的多少,你如何处理排列测试,什么时候编写测试的成本超过测试的价值。我会测试实际逻辑,而不会因为测试getter和setter而得意忘形。通常,getter和setter在测试对象之间的交互过程中都会用到。在您的示例中,我认为可能需要测试的唯一事情是抛出IllegalArgumentException,并且格式化工作正常。(考虑到您的属性允许成员重置为null,测试抛出的异常没有太大价值。)
单元测试应该主要对开发人员有用,而不是为了让管理层满意或满足代码覆盖率指标(尽管有很多地方会被这类事情冲昏头脑)。我不会花时间测试不相关的事物的不同组合。我会测试实际的逻辑,而不会因为测试getter和setter而得意忘形。通常,getter和setter在测试对象之间的交互过程中都会用到。在您的示例中,我认为可能需要测试的唯一事情是抛出IllegalArgumentException,并且格式化工作正常。(考虑到您的属性允许成员重置为null,测试抛出的异常没有太大价值。)
单元测试应该主要对开发人员有用,而不是为了让管理层满意或满足代码覆盖率指标(尽管有很多地方会被这类事情冲昏头脑)。我不会花时间测试不相关的事物的不同组合。为什么要测试不相关参数之间的交互?你的问题中有很多重复的测试。在我看来,你有: 空测试
测试空bibbleArgumentNullException
测试空hoochArgumentNullException
测试空hoochArgumentNullException
属性由ctor正确设置Bibble
由ctor正确设置的属性Hooch
属性返回预期值BibbleHooch
如果没有必要,不要暴露setter。更喜欢类的最小接口-您需要的测试更少,逻辑也更简单。为什么要测试不相关参数之间的交互?你的问题中有很多重复的测试。在我看来,你有: 空测试
测试空bibbleArgumentNullException
测试空hoochArgumentNullException
测试空hoochArgumentNullException
属性由ctor正确设置Bibble
由ctor正确设置的属性Hooch
属性返回预期值BibbleHooch
如果没有必要,不要暴露setter。与类相比,您更喜欢一个最小的接口-您将需要更少的测试,并且逻辑将更简单。在测试时,您是如何描述快乐路径的。例如新Foo(空,“有效字符串”);“勇敢之旅”是幸福之路。或者问一下您如何命名这个测试可能更好。我会通过NullArgumentExceptionOnNullBibble将该测试命名为
(或者无论您的等效命名约定是什么)。。。这不是一条快乐的道路!我想这可能是一个过度思考的情况,我的情况是这样的。我很担心是否明确提到了快乐之路,但我想我不会为此担心。只要测试有效。如果您的意思是“我应该如何命名测试以查看hooch属性是否设置正确?”那么hoochpropertysetcorrectlyfromtor
如何呢?啊,我明白了-不,您不必担心提及“快乐路径”是什么(测试不在乎!),而是关注测试的实际行为,无论测试是快乐还是例外,你是如何描述快乐的道路的。例如新Foo(空,“有效字符串”);“勇敢之旅”是幸福之路。或者问一下您如何命名这个测试可能会更好。我会通过NullArgumentExceptionOnNullBibble将这个测试命名为(或者其他类似的名称)