这个问题看起来很奇怪,或者根本没有意义。 最近,我正在用Java语言复习一些代码,其中开发人员使用了单元测试库“ org.easytesting”中的一种方法。 示例:他正在使用该库中“ Strings”类的方法“ Strings.isNullOrEmpty”来验证某些值的非空性,并在代码的其他位置使用其他类/方法。
我知道开发了一个库来简化我们的生活(Java的基本原理),并且可以在任何地方/任何地方使用它,但是是否建议在实时开发代码中使用单元测试库? 我知道使用它不会导致兼容性问题,因为总是会执行单元测试用例。
我在很多地方搜索过,可能是我想念一个好词。
答案 0 :(得分:1)
可以说单元测试库只是一个库,但我不这样认为。
首先,单元测试库的目的是在不是生产代码的代码中使用。这意味着可能无法满足与生产代码相关的某些质量标准。例如,如果单元测试库中存在错误,那么这很烦人,但通常不会损害生产代码。或者,性能可能与线程安全性等不太相关。我不想说流行的单元测试框架的质量很差。但是,这些库的开发人员在世界范围内都有权根据其代码不属于生产代码的假设来做出设计决策。
第二,使用库应根据相应库的原理进行。例如,如果您使用特定的gui库,则会对应用程序中事件处理的方式产生影响。而且,单元测试框架的假设是该框架由可执行程序控制(来自测试运行程序)。因此,该库中的所有功能都可能取决于测试运行程序的设置和运行。如果库中的某些函数不具有此依赖关系,则这是实现细节,可能会随库的新版本而更改。
最后,代码应传达意图。其中包括(双关语)。开发人员不是要编写单元测试代码,而是要包含单元测试库进行通信。
答案 1 :(得分:1)
Considering that there are other, production-oriented libraries out there会检查字符串是否为空或空,对测试框架方法的任何使用都应视为 strong 代码气味,并在代码审查中进行标识。
将来,此测试库可能会引入其他部分更改,从而使在生产环境中运行它的成本过高或不安全,因为通过此空检查或null检查运行的代码可能被用作攻击区域。更糟糕的是,如果您的团队想从该测试框架中删除 ,那么您现在必须更改生产代码,如果他们正在做的只是更改 test ,则许多团队都不愿意这样做。 em>依赖项。
答案 2 :(得分:0)
这里没有专门介绍测试库,下面是对这个更普遍的问题的解答:
您是否应该使用任何框架或库提供的通用编程实用程序类? (例如,应使用由web / UI / logging / ORM / ...框架提供的StringUtils / CollectionUtils / etc)。
即使在这种更一般的情况下,其他答案的论点仍然大部分有效。这里还有一些:
因此,我通常会说您不应该使用框架的实用程序,除非在实际使用这些框架的地方。但是即使那样,您也应该考虑使用Apache Commons或Guava等来保持一致性。
现在,您还可以在后两个中将 UI 和后端替换为 test 和 production 点。在通常不将它们包含为运行时依赖的意义上,测试框架也很特殊。因此,您需要更改测试依赖项的范围,以使其在运行时可用。由于最后一点,您应该避免这种情况。