Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用maven和jenkins,如何测试程序员做的一些测试用例?_Java_Maven_Jenkins - Fatal编程技术网

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

Java 使用maven和jenkins,如何测试程序员做的一些测试用例?,java,maven,jenkins,Java,Maven,Jenkins,我正在从事许多项目,我们正在使用Java、Springs、Maven和Jenkins for CI,但我遇到了一些问题,一些程序员没有向项目中添加真正的junit测试用例。我希望maven和jenkins在部署到服务器之前运行测试。一些程序员做了一个空白测试,所以它开始和停止,并将通过测试 有人能告诉我如何自动执行此检查,以便maven和jenkins可以查看测试是否有输出。您需要添加代码覆盖率插件,如JaCoCo、EMMA、Cobertura等。然后您需要在插件的配置中定义您想要的代码覆盖率百

我正在从事许多项目,我们正在使用Java、Springs、Maven和Jenkins for CI,但我遇到了一些问题,一些程序员没有向项目中添加真正的junit测试用例。我希望maven和jenkins在部署到服务器之前运行测试。一些程序员做了一个空白测试,所以它开始和停止,并将通过测试


有人能告诉我如何自动执行此检查,以便maven和jenkins可以查看测试是否有输出。

您需要添加代码覆盖率插件,如JaCoCo、EMMA、Cobertura等。然后您需要在插件的配置中定义您想要的代码覆盖率百分比(基本上是“测试覆盖的代码”),以便构建通过。如果低于该数字,则可能导致生成失败。而且,如果构建失败,Jenkins(或任何您的CI)将不会部署。

除了查看代码之外,我还没有找到解决此问题的好方法

代码覆盖率无法检测到

从测试的数量来看,也有失败。看看测试名称,你肯定会失败

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

“Kevin”如何击败检查的摘要:

  • 编写一个名为吸烟的测试。在这个测试中,您使用不同的参数组合调用被测试类的每个方法,每个调用都包装在
    try{…}catch(Throwable t){/*ignore*/}
    中。这为您提供了很好的覆盖率,而且测试从未失败过

  • 编写一堆空测试,其名称听起来像是您想出的奇特测试场景,例如
    widgetstrunredwhenflangiesoff
    widgetscointerrotateiffange大于50
    。这些测试都是空的,所以永远不会失败,而且管理者在检查CI系统时会看到很多详细的测试用例

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

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

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

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

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

所以,如果有人要“现代化”杰斯特,你就有办法找到“凯文”

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

我建议使用具有非常有用插件的

在Sonar中,您可以对以下各项的任意组合设置警报:例如,您可以要求您的java项目

  • “单元测试”>1
  • “覆盖范围”>20
强制开发人员至少有一个单元测试,覆盖至少20%的代码基。(质量相当低的酒吧,但我想这是你的观点!)

设置额外的服务器可能看起来像是额外的工作,但当您有多个Maven项目时,解决方案会扩展。声纳的配置就是您需要配置的全部。 Jacoco是默认的代码覆盖工具,Sonar还将自动运行其他工具,如Checkstyle、PMD和Findbugs


最后,Stephen对代码审查的看法是完全正确的。Sonar有一些基本但有用的代码检查功能。

正如其他人所指出的,如果你的程序员已经开始欺骗编码实践,那么使用更好的覆盖工具并不能解决你的问题。他们也可能被欺骗

您需要与您的团队坐下来,与他们坦诚地讨论专业精神以及软件工程应该是什么

根据我的经验,代码审查是很好的,但它们需要在提交代码之前进行。但要在一个有人“作弊”的项目中工作,你至少需要有一个你可以信任的评审员。

对于所谓的“突变测试”是一个很好的解决方案:

故障(或突变)会自动植入到代码中,然后运行测试。如果你的测试失败,那么突变就被杀死,如果你的测试通过,那么突变就活了

检测的质量可以通过突变致死的百分比来衡量

好的是,你可以很容易地在连词中使用它