我正在从事多个项目,我们正在使用Java,Springs,Maven和Jenkins进行CI,但是我遇到了一些程序员没有在项目中添加真正的junit测试用例的问题。我希望maven和jenkins在部署到服务器之前先运行测试。一些程序员进行了空白测试,因此它可以启动和停止,并通过测试。
有人可以告诉我如何自动执行此检查,以便maven和jenkins可以查看测试是否输出了一些结果。
除了查看代码之外,我没有找到任何解决此问题的好方法。
代码覆盖率无法检测到我见过的最糟糕的单元测试
查看测试数量,那里也失败。查看测试名称,您打赌失败。
如果您拥有像“ Kevin”这样的开发人员来编写此类测试,则只能通过代码审查来捕获这些测试。
“ Kevin”如何击败检查的摘要:
编写一个名为的测试smokes
。在此测试中,您将使用不同的参数组合调用被测类的每个方法,每个调用都包装在中try { ... } catch (Throwable t) {/* ignore */}
。这为您提供了广泛的覆盖范围,并且测试从未失败
编写空测试用的名字听起来像你已经想到了花哨的测试场景,例如负载widgetsTurnRedWhenFlangeIsOff
,widgetsCounterrotateIfFangeGreaterThan50
。这些是空的测试,因此将永远不会失败,并且经理检查CI系统将看到许多详细的测试用例。
代码审查是捕获“ Kevin”的唯一方法。
希望您的开发人员没有那么糟糕
今天早上我洗个澡。有一种自动分析可以捕获“
Kevin”,但是不幸的是它仍然可以被欺骗,因此尽管它不是编写不良测试的解决方案,但确实使编写不良测试变得更加困难。
变异测试
这是一个旧项目,无法在最新代码上使用,我不建议您使用此代码。但是我建议它暗示一种自动分析类型,它将阻止“ Kevin”
如果要实现这一点,我将要做的是编写一个“
JestingClassLoader”,它使用例如ASM一次用一个小的“笑话”来重写字节码。然后,在使用该类加载器加载后,针对您的类运行测试套件。如果测试没有失败,那么您就在“凯文”地区。问题是您需要针对代码中的每个分支点运行所有测试。不过,您可以使用自动覆盖率分析和测试时间分析来加快速度。换句话说,您知道每个测试执行的代码路径,因此,当对一个特定路径进行“开玩笑”时,您仅运行符合该路径的测试,然后从最快的测试开始。如果这些测试都没有失败,则说明您的测试覆盖范围很弱。
因此,如果有人要对“弄臣”进行“现代化”,那么您将有办法找出“凯文”。
但这不会阻止人们编写不良测试。因为您可以通过编写测试来通过该检查,以验证代码的行为是否符合当前的行为,错误以及所有。哎呀,甚至有一些公司出售会“为您编写测试”的软件。我不会通过从此处链接到他们来为他们提供Google
Page排名,但是我的观点是,如果他们能够使用此类软件,您将拥有大量测试,这些测试会直接影响您的代码库,并且不会发现任何错误(因为更改任何内容后,“生成的”测试将立即失败,因此,进行更改需要争论更改本身以及更改所导致的所有单元测试的更改,即使更改,业务成本也会增加该更改正在修复一个
真正的 错误)
问题内容: 我在运行Ubuntu的本地计算机上设置Jenkins,将其指向我的jdk,然后进行maven,创建了一个作业来运行我的Selenium测试,并为它提供了项目中pom.xml的路径,但是当我尝试运行该作业时,它立即失败。控制台输出显示 在工作区中构建/ var / lib / jenkins / workspace / new job [new job] $ / usr / share
问题内容: 我有一个用Rails编写的应用程序。为了对其进行测试,我构建了一个docker映像。一切正常。 但是,当我配置Jenkins运行这些测试时,就会出现问题。在构建步骤中,我要做的是: 其中rspec是在docker-compose.yml上定义的服务,其中包含以下命令: 当rspec返回错误时,构建仍然成功。这里是输出示例: 返回1,构建仍然成功。 如果我通过docker通过其ID检查容
问题内容: 当我使用命令:mvn test时,maven使用主要资源而不是src / test / resources中的测试资源。 我如何才能使Maven使用测试资源而不是主要资源? 编辑:我使用Classloader查找我的资源。Classloader可以从我的src / test / resources目录中找到资源,但是它首先在src / main / java中查找该资源。 还是在运行将
我想为詹金斯创建一个简单的硒项目。当我用Runner.java运行测试时,输出显示0种情况。当我用mvn运行我的测试时,e.g.mvn干净的验证-Dcucumber.options="--tags@烟雾"输出显示我构建成功 我所有的类都在src/test/java/package中 Runner:src/test/java/Runner/Runner。JAVA 胶水:src/test/java/胶
问题内容: 在maven中,我可以为依赖关系解析指定“类型”。我正试图拉下一个。如何使用Gradle做到这一点? 我已经尝试过使用下面的Gradle Dependency,但这并没有降低。 Maven依赖关系: 详细信息: Gradle 1.7 我正在尝试从 Maven Central 下拉“ hbase-0.94.2-tests.jar” 问题答案: Gradle没有Maven的直接等效项,但应