Unit testing 我是否需要在没有控制流的情况下对函数进行单元测试?

Unit testing 我是否需要在没有控制流的情况下对函数进行单元测试?,unit-testing,Unit Testing,我想知道是否应该对没有控制流的函数进行单元测试。此函数接受一些输入,调用5/6个其他函数的序列,然后返回一些输出 测试它们似乎是浪费时间,因为我不知道我要测试什么。调用的其他函数已经对它们进行了单元测试。 我的主要缺点是我不知道输出应该是什么,我需要在测试中调用相同的函数,看看结果是否一致;那么我在测试什么呢?测试功能和实际功能是否在相同的顺序中具有相同的行 谢谢你的洞察力 注意:与上一个问题相同,如果您认为它主要是基于观点的,请重新表述为“根据单元测试艺术中提倡的原则,我应该在没有控制流的情况

我想知道是否应该对没有控制流的函数进行单元测试。此函数接受一些输入,调用5/6个其他函数的序列,然后返回一些输出

测试它们似乎是浪费时间,因为我不知道我要测试什么。调用的其他函数已经对它们进行了单元测试。 我的主要缺点是我不知道输出应该是什么,我需要在测试中调用相同的函数,看看结果是否一致;那么我在测试什么呢?测试功能和实际功能是否在相同的顺序中具有相同的行

谢谢你的洞察力


注意:与上一个问题相同,如果您认为它主要是基于观点的,请重新表述为“根据单元测试艺术中提倡的原则,我应该在没有控制流的情况下进行单元测试吗?”

简短回答:是的,当然可以

长句回答:方法如何做事情最终取决于“实现”细节。从这个意义上说:您根本不应该关心一个方法是否使用开关、一些if/else、循环,或者只是按顺序调用其他方法

相反,您应该理解您的方法提供的契约:它需要哪些输入;以及由此产生的结果(可能取决于输入)

这就是您所关注的:创建一个可以运行您的方法的设置;然后检查该方法是否支持该契约

例如:

public void foo(Bar bar) {
  FooBar fooBar = bar.wobbel();
  fooBar.throttle();
  fooBar.rattle(this.someField);
}

上面的代码不包含任何控制流语句。但仍然有很多地方可能出错(例如NullPointerException)。您不认为使用单元测试捕获这些数据会更好吗?

测试不测试控制流。测试测试函数是否为某些输入返回正确的输出,就是这样。如果您承诺进行测试,那么假设函数的所有子函数都已正确覆盖,那么函数不需要测试的唯一方法就是您向自己做出一个牢不可破的承诺,即无论发生什么情况,函数都不会被编辑。你准备好了吗?@Amadan True,你是对的。谢谢,我将实现它们:染料,这很有意义。非常感谢。