任何人都应该在实时开发环境中使用单元测试库方法和类吗?

时间:2018-10-30 06:27:59

标签: java unit-testing

这个问题看起来很奇怪,或者根本没有意义。 最近,我正在用Java语言复习一些代码,其中开发人员使用了单元测试库“ org.easytesting”中的一种方法。 示例:他正在使用该库中“ Strings”类的方法“ Strings.isNullOrEmpty”来验证某些值的非空性,并在代码的其他位置使用其他类/方法。

我知道开发了一个库来简化我们的生活(Java的基本原理),并且可以在任何地方/任何地方使用它,但是是否建议在实时开发代码中使用单元测试库? 我知道使用它不会导致兼容性问题,因为总是会执行单元测试用例。

我在很多地方搜索过,可能是我想念一个好词。

3 个答案:

答案 0 :(得分:1)

可以说单元测试库只是一个库,但我不这样认为。

首先,单元测试库的目的是在不是生产代码的代码中使用。这意味着可能无法满足与生产代码相关的某些质量标准。例如,如果单元测试库中存在错误,那么这很烦人,但通常不会损害生产代码。或者,性能可能与线程安全性等不太相关。我不想说流行的单元测试框架的质量很差。但是,这些库的开发人员在世界范围内都有权根据其代码不属于生产代码的假设来做出设计决策。

第二,使用库应根据相应库的原理进行。例如,如果您使用特定的gui库,则会对应用程序中事件处理的方式产生影响。而且,单元测试框架的假设是该框架由可执行程序控制(来自测试运行程序)。因此,该库中的所有功能都可能取决于测试运行程序的设置和运行。如果库中的某些函数不具有此依赖关系,则这是实现细节,可能会随库的新版本而更改。

最后,代码应传达意图。其中包括(双关语)。开发人员不是要编写单元测试代码,而是要包含单元测试库进行通信。

答案 1 :(得分:1)

Considering that there are other, production-oriented libraries out there会检查字符串是否为空或空,对测试框架方法的任何使用都应视为 strong 代码气味,并在代码审查中进行标识。

将来,此测试库可能会引入其他部分更改,从而使在生产环境中运行它的成本过高或不安全,因为通过此空检查或null检查运行的代码可能被用作攻击区域。更糟糕的是,如果您的团队想从该测试框架中删除 ,那么您现在必须更改生产代码,如果他们正在做的只是更改 test 依赖项。

答案 2 :(得分:0)

这里没有专门介绍测试库,下面是对这个更普遍的问题的解答:

您是否应该使用任何框架或库提供的通用编程实用程序类? (例如,应使用由web / UI / logging / ORM / ...框架提供的StringUtils / CollectionUtils / etc)。

即使在这种更一般的情况下,其他答案的论点仍然大部分有效。这里还有一些:

  • 这些实用程序是专门为框架使用而开发的。它们可能仅包含具有狭窄用例的非常具体的方法(框架实际需要的方法),仅此而已。它们可能针对框架的特定内部行为进行了优化,而不是出于一般目的。
  • 框架开发人员可能会引入重大更改,而无需多加考虑,因为他们不希望框架之外的用户很多。
  • 看到来自例如后端代码中的一个UI库,它看起来像代码气味。
  • 在模块化项目中,您不想向框架的实用程序引入其他依赖关系(同样,后端模块对UI框架的依赖关系就是代码味道)。还会增加一些不必要的传递依赖,这些传递依赖甚至可能与其他依赖不兼容。

因此,我通常会说您不应该使用框架的实用程序,除非在实际使用这些框架的地方。但是即使那样,您也应该考虑使用Apache Commons或Guava等来保持一致性。

现在,您还可以在后两个中将 UI 后端替换为 test production 点。在通常不将它们包含为运行时依赖的意义上,测试框架也很特殊。因此,您需要更改测试依赖项的范围,以使其在运行时可用。由于最后一点,您应该避免这种情况。