使用maven和jenkins,如何测试程序员做了一些测试用例?

tec*_*013 5 java maven jenkins

我正在开发一些项目,我们正在使用Java,Springs,Maven和Jenkins进行CI,但我遇到的问题是一些程序员没有在项目中添加真正的junit测试用例.我希望maven和jenkins在部署到服务器之前运行测试.一些程序员进行了空白测试,因此启动和停止并通过测试.

有人可以请告诉我如何自动进行此检查,以便maven和jenkins可以查看测试是否输出了一些输出.

Ste*_*lly 4

除了检查代码之外,我还没有找到任何好的解决方案。

代码覆盖率无法检测到我见过的最糟糕的单元测试

看看测试的数量,那里也失败了。看看测试名称,你肯定会失败。

如果您有像“Kevin”这样编写此类测试的开发人员,那么您只能通过代码审查来捕获这些测试。

“凯文”如何击败检查的总结:

  • 编写一个名为 的测试smokes。在此测试中,您使用不同的参数组合调用被测类的每个方法,每个调用都包含在try { ... } catch (Throwable t) {/* ignore */}. 这为您提供了很好的覆盖范围,并且测试永远不会失败

  • 编写大量空测试,其名称听起来就像您已经想到了奇特的测试场景,例如widgetsTurnRedWhenFlangeIsOffwidgetsCounterrotateIfFangeGreaterThan50。这些都是空测试,所以永远不会失败,经理检查 CI 系统会看到很多详细的测试用例。

代码审查是抓住“Kevin”的唯一方法。

希望你们的开发者没那么糟糕

更新

今天早上我洗了个澡。有一种类型的自动化分析可以捕获“Kevin”,不幸的是它仍然可能被欺骗,所以虽然它不是人们编写糟糕测试的解决方案,但它确实使编写糟糕测试变得更加困难。

突变测试

这是一个旧项目,不适用于最近的代码,我不建议您使用它。但我建议它暗示一种可以阻止“凯文”的自动分析

如果我要实现这一点,我要做的就是编写一个“JestingClassLoader”,它使用例如 ASM,一次用一个小“玩笑”重写字节码。然后在使用该类加载器加载时针对您的类运行测试套件。如果测试没有失败,那么您就进入了“凯文”之地。问题是您需要针对代码中的每个分支点运行所有测试。不过,您可以使用自动覆盖率分析和测试时间分析来加快速度。换句话说,您知道每个测试执行哪些代码路径,因此当您针对一个特定路径开“玩笑”时,您只运行命中该路径的测试,并从最快的测试开始。如果这些测试都没有失败,那么您就发现了测试覆盖范围的弱点。

因此,如果有人要“现代化”小丑,你就有办法找到“凯文”。

但这并不能阻止人们编写糟糕的测试。因为您可以通过编写测试来验证代码的行为(包括错误等),从而通过该检查。哎呀,甚至有些公司销售的软件会“为你编写测试”。我不会通过从这里链接到他们来给他们谷歌页面排名,但我的观点是,如果他们得到这样的软件,你将有大量的测试来直接保护你的代码库并且不会发现任何错误(因为一旦您更改任何内容,“生成的”测试就会失败,因此现在进行更改需要争论更改本身以及更改破坏的所有单元测试的更改,从而增加了进行更改的业务成本,即使该更改正在修复一个真正的错误)