问题标签 [pitest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2223 浏览

maven-3 - 声纳 Pitest 插件

我想整合一些突变测试来确保我的junit测试的质量。我想在我的项目的声纳仪表板中获得结果。

声纳 ptest 插件似乎可以满足我的要求,但是 maven 3 存在一些问题,它仍在开发中。

有人试过这个插件吗?还有其他选择吗?

0 投票
1 回答
1943 浏览

java - Android:如何使用 Robolectric 运行 PIT 突变测试?

如何使用Robolectric PIT测试 Android 应用程序?

使用 Robolectric,您可以在 JVM 中运行 Android 测试。使用 PIT,您可以显示线路覆盖率并进行突变测试。对我来说,可以使用 Eclipse+Plugins,但没有要求。


这是我到目前为止所尝试的:

我有一个 Android 项目,我们称之为MyProject

我现在想使用Robolectric PIT在 JVM 中测试 MyProject 。因此,我创建了另一个名为MyTest的项目,并成功地运行了 Robolectric 测试,正如robolectric 快速入门中所述。这my.app.tests.MyActivityTest看起来像:

现在是棘手的部分:我想将 PIT 的线路覆盖和突变测试添加到我的 Robolectric 测试中。首先尝试使用Pitclipse - 没有运气。Pitclipse 似乎还不支持 Eclipse Project Depencies。

所以我的第二次尝试是使用命令行,如PIT quick start中所述:

首先,我确保我的测试通过命令行使用 Junit 成功运行:

其中<classpath>包含:junit4、robolectric、MyProject 类文件、MyTest 类文件、android.jar 和其他必要的android 库。

一旦这个 JUnit 测试成功,我<classpath>在 PIT 调用中使用了相同的方法,并在 MyProject 的根路径中执行该调用:

但是,这会导致我在下面发布的异常。我想我需要使用 PIT 的--excludedClasses参数排除一些类,但没有提示哪个类可能会导致问题。请注意,MyActivityTest它没有超类,也没有显式构造函数。

0 投票
0 回答
1058 浏览

spring-test - 基于 SpringJUnitRunner 的测试在 PIT 下失败

我有一个使用 SpringJUnitRunner 来测试控制器和过滤器的项目。当我正常运行测试时,一切运行正常。但是,当我使用 PIT 运行测试时,使用 SpringJUnitRunner 的每个测试都会出现以下异常:

应该注意的是,在这些相同的测试中,我们在使用 Emma 进行代码覆盖时也遇到了问题,因此不得不切换到 Jacoco。

SpringJUnitRunner 和 PIT 之间是否存在任何已知的不兼容性,或者我可以进行某种配置更改以使这两者能够很好地协同工作?

提前感谢您的帮助。

0 投票
1 回答
1172 浏览

java - apache commons math 上的 PIT Mutation 测试显示线路覆盖率和突变覆盖率为 0%

我正在尝试将 PIT Mutation 测试与 maven 一起用于 apache 常见数学测试。

我将此添加到我的pom.xmlmvn org.pitest:pitest-maven:mutationCoverage. 我可以运行它,但索引文件显示 Line Coverage 和 Mutation Coverage 为 0%。我想我没有正确给出参数。此外,我需要改变 apache-common-math 的一项测试,例如 LUDecomposition。

0 投票
1 回答
262 浏览

android - 运行 PIT 时从类路径中排除提供的依赖项

我想在 Android 项目上使用 PIT (pitest.org) 插件。我正在使用 Android Maven 插件并且有一个相当标准的 POM。Android JAR 包含在 Maven 中,具有提供的范围并包含实际源代码,而不是 SDK 中的存根 JAR。

通过 Maven 插件从命令行运行 PIT 失败:

之前关于 Google Groups 的一些讨论表明,包含旧版本的 JUnit 可能会导致这样的错误,并且看起来 Android JAR 包含 3.x JUnit 库之一(感谢 Android 团队......)。为了确认或否认这种预感,我想从 PIT 的类路径中排除 Android JAR,因为无论如何我已经在 Surefire 测试阶段这样做了,但我看不到任何这样做的选项。

有没有办法从 PIT 中排除提供的依赖项,而不必更改该依赖项的范围?

0 投票
1 回答
1931 浏览

java - 从命令行运行 Pitest

根据 Pitest 的文档,这似乎应该很简单,但这给我带来了一些麻烦。我应该能够拥有

但我不知道我的项目应该包含哪些内容,例如“<your classpath>”。

我的项目的文件结构如下所示:

在此处输入图像描述

最终我想把它放在一个 .bat 文件中并在 TeamCity 上为我的 CI 运行它

任何帮助,将不胜感激!

0 投票
2 回答
1849 浏览

java - 如何运行最糟糕的蚂蚁脚本

我正在尝试创建一个 ant 脚本来运行 ptest 以便能够自动化我的突变测试。我收到错误消息:

无法找到或加载主类 org.pitest.mutationtest.commandline.MutationCoverageReport

这是我的 MutationTest.xml 蚂蚁脚本

是什么导致了这个错误,我该如何解决?

编辑:我改为pitClasspath="PhoneBook.path"现在pitClasspath="pit.path"我有一个新错误:

我不知道这是更好还是更糟,但希望它有助于找到问题。

0 投票
2 回答
838 浏览

java - 使用 PIT 查找无用的单元测试

假设我们有一个要测试的代码:

现在假设我们在一个类中放置了 2 个单元测试。第一个“测试一切”,而第二个“什么都不做”:

这是一个 IRL 示例:我已经看到数十个测试通过用一些无用的代码替换测试内容来“修复”,因为被测试的代码合同随着时间的推移而变化。

现在,PIT“入口”单元是一个包含测试方法的类(不是单独的测试方法本身),所以在上述情况下,PIT 不仅会显示 100% 的行覆盖率,还会显示 100% 的变异覆盖率。

好的,我很高兴知道我有 100% 的突变覆盖率,但是我如何识别无用的测试——testDoSmth2()在上述情况下(假设我的突变覆盖率很高)?

0 投票
1 回答
2387 浏览

java - 应该使用具有自动注入字段的方法时不会杀死突变

我有以下内容:

和以下测试:

正如预期的那样,测试通过了。当我通过 PIT 运行它时,我得到以下结果

第 33 行在类代码中突出显示。

检查的测试如下:

  • my.package.UnsetPropertyTest.testCallsSetPropertyWithCorrectParameters(my.package.UnsetPropertyTest) (32 毫秒)
  • my.package.UnsetPropertyTest.testUnsetThrowsForIncorrectNumberOfParameters(my.package.UnsetPropertyTest) (3 毫秒)

现在:

  • 当我更改测试调用参数 ( args) 时,测试失败。正如预期的那样
  • 当我更改断言 ( verify(setProperty).setProperty(...)) 参数时,测试失败。正如预期的那样。
  • 当我手动注释掉第一个代码块中突出显示的函数调用时,测试失败。

为什么突变会存活?

我正在使用 Java 8、Mockito 1.9.5 和 PIT 1.1.4。

0 投票
1 回答
12373 浏览

java - JUnit 测试通过但 PIT 说套件不是绿色的

在尝试运行 PIT 突变测试时,我收到以下错误:

突变覆盖失败:计算线路覆盖率时,所有测试都没有通过突变。突变测试需要绿色套件。

当我进行正常的测试构建时,测试运行得很好,但是在运行突变测试阶段时,它们应该会失败,但没有提供有关原因的详细信息。我已经查看了PIT 测试常见问题解答中列出的原因,但我仍然不知道可能出了什么问题。

我试过了:

  • 将 -Dthreads=1 选项添加到任何多线程问题的规则中
  • 找不到任何唯一的系统属性,这对失败的几个测试
  • 在正常运行下不会忽略测试

我应该尝试哪些其他事情?或者其他方式来调试这里可能发生的事情?