问题标签 [mutation-testing]
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.
java - 从命令行运行 Pitest
根据 Pitest 的文档,这似乎应该很简单,但这给我带来了一些麻烦。我应该能够拥有
但我不知道我的项目应该包含哪些内容,例如“<your classpath>”。
我的项目的文件结构如下所示:
最终我想把它放在一个 .bat 文件中并在 TeamCity 上为我的 CI 运行它
任何帮助,将不胜感激!
java - 使用 PIT 查找无用的单元测试
假设我们有一个要测试的代码:
现在假设我们在一个类中放置了 2 个单元测试。第一个“测试一切”,而第二个“什么都不做”:
这是一个 IRL 示例:我已经看到数十个测试通过用一些无用的代码替换测试内容来“修复”,因为被测试的代码合同随着时间的推移而变化。
现在,PIT“入口”单元是一个包含测试方法的类(不是单独的测试方法本身),所以在上述情况下,PIT 不仅会显示 100% 的行覆盖率,还会显示 100% 的变异覆盖率。
好的,我很高兴知道我有 100% 的突变覆盖率,但是我如何识别无用的测试——testDoSmth2()
在上述情况下(假设我的突变覆盖率很高)?
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。
javascript - Node.js:关闭 Karma 服务器会杀死父进程
我参与了一个为 Javascript 提供突变测试的 OSS 项目——基本上是通过改变单元测试测试的代码来测试单元测试的有效性。
变异代码的一个不可避免的影响是您可能会遇到无限循环:
可能成为
虽然可以排除一些基本突变(例如这个),但不可能(也不希望)排除每个可能导致无限循环的突变。相反,我一直专注于检测无限循环,以警告终止当前的突变测试并继续下一个突变。
然而,在 Karma 中,我遇到了一个问题:像上面这样的循环将保持浏览器被占用并将你的 CPU 发送到 100%。当我尝试关闭 Karma 服务器时,出现以下错误:
这不仅会杀死我的父进程,从而使所有剩余的突变都未经测试,而且还会使子进程(我正在运行一个小型业力服务器实例池)悬空,然后我必须手动杀死它。
我已经为此苦苦挣扎了很长一段时间,感觉就像撞到了一堵混凝土墙。很感谢任何形式的帮助。
如何重现?
如果您想了解更多信息/上下文,请随时在https://github.com/jimivdw/grunt-mutation-testing/tree/kill_looping_karma_servers查看项目
在那个分支中,我有一个名为script_endlessLoop.js的文件,当它发生变异时,会在很多情况下导致无限循环。我现在通过添加@excludeMutations 禁用了突变,因此需要删除或修改。然后运行grunt test:karma
应该会给你上述错误。
请小心!确保在运行此程序后清理所有与节点相关的进程,因为它可能会导致您的计算机严重减速
ruby-on-rails - 了解突变失败
我有以下 ActiveRecord 模型类方法:
当我针对这种方法运行 Mutant 时,我被告知在测试运行后有 17 个突变和 16 个仍然“活着”。
这是“活”突变之一:
如果我手动进行相同的更改,我的测试会失败 - 正如预期的那样。
所以我的问题是:我如何编写一个“杀死”这个突变的单元测试?
java - JUnit 报告显示测试功能,而不是覆盖率
团队领导的问题之一是团队中的人(有时甚至包括我自己)经常在没有任何测试功能的情况下创建 JUnit 测试。
这很容易完成,因为开发人员使用他们的 JUnit 测试作为工具来启动他们正在编码的应用程序的一部分,然后故意或忘记将其签入,而无需任何断言测试或模拟验证。
后来人们忘记了测试是不完整的,但它们通过并产生了很好的代码覆盖率。运行应用程序并通过它提供数据将创建来自 Cobertura 或 Jacoco 的高代码覆盖率统计信息,但除了它在不崩溃的情况下运行的能力之外没有任何测试 - 我什至已经看到使用大的 try-catch 块解决了考试。
是否有可以测试测试的报告工具,这样我就不需要经常查看测试代码?
我暂时兴奋地发现Jester通过更改被测代码(例如 if 子句)并重新运行它以查看它是否会破坏测试来测试测试。
但是,这不是您可以设置为在 CI 服务器上运行的东西 - 它需要在命令行上进行设置,如果不显示其 GUI 就无法运行,只能将结果打印到 GUI 上,而且运行时间也很长。
java - JUnit 测试通过但 PIT 说套件不是绿色的
在尝试运行 PIT 突变测试时,我收到以下错误:
突变覆盖失败:计算线路覆盖率时,所有测试都没有通过突变。突变测试需要绿色套件。
当我进行正常的测试构建时,测试运行得很好,但是在运行突变测试阶段时,它们应该会失败,但没有提供有关原因的详细信息。我已经查看了PIT 测试常见问题解答中列出的原因,但我仍然不知道可能出了什么问题。
我试过了:
- 将 -Dthreads=1 选项添加到任何多线程问题的规则中
- 找不到任何唯一的系统属性,这对失败的几个测试
- 在正常运行下不会忽略测试
我应该尝试哪些其他事情?或者其他方式来调试这里可能发生的事情?
java - µJava 不是要杀死 Mutants 吗?
我正在使用µJava对我的 java 程序进行突变测试。因为我正在学习突变测试。
我有 2 节课
1:父母
和 2:儿童
我正在应用muJava的IOD操作。`因此它正在生成突变体。它正在删除子类的重写方法 printTemp。
我的测试用例是:
但是当我运行突变测试时,我发现突变体还活着。我想杀了它!我能做些什么 ??
gruntjs - 使用 gulp 进行 NodeJS 的突变测试
是否有任何节点模块可用于使用类似于 grunt-mutation-testing 的 gulp 进行突变测试?
因为我正在使用 gulp 任务来报告突变覆盖率,但没有找到任何材料。