问题标签 [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.

0 投票
0 回答
167 浏览

ruby - 突变体没有找到测试示例

在“hexx-null”gem 中,我有一个文件:

RSpec 规范文件是:

然后我从 gem root运行突变体:

结果是:

似乎突变体没有找到任何例子,但为什么呢?

0 投票
1 回答
1931 浏览

java - 从命令行运行 Pitest

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

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

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

在此处输入图像描述

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

任何帮助,将不胜感激!

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 投票
0 回答
550 浏览

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应该会给你上述错误。 请小心!确保在运行此程序后清理所有与节点相关的进程,因为它可能会导致您的计算机严重减速

0 投票
1 回答
139 浏览

ruby-on-rails - 了解突变失败

我有以下 ActiveRecord 模型类方法:

当我针对这种方法运行 Mutant 时,我被告知在测试运行后有 17 个突变和 16 个仍然“活着”。

这是“活”突变之一:

如果我手动进行相同的更改,我的测试会失败 - 正如预期的那样。

所以我的问题是:我如何编写一个“杀死”这个突变的单元测试?

0 投票
5 回答
2759 浏览

java - JUnit 报告显示测试功能,而不是覆盖率

团队领导的问题之一是团队中的人(有时甚至包括我自己)经常在没有任何测试功能的情况下创建 JUnit 测试。

这很容易完成,因为开发人员使用他们的 JUnit 测试作为工具来启动他​​们正在编码的应用程序的一部分,然后故意或忘记将其签入,而无需任何断言测试或模拟验证。

后来人们忘记了测试是不完整的,但它们通过并产生了很好的代码覆盖率。运行应用程序并通过它提供数据将创建来自 Cobertura 或 Jacoco 的高代码覆盖率统计信息,但除了它在不崩溃的情况下运行的能力之外没有任何测试 - 我什至已经看到使用大的 try-catch 块解决了考试。

是否有可以测试测试的报告工具,这样我就不需要经常查看测试代码?

我暂时兴奋地发现Jester通过更改被测代码(例如 if 子句)并重新运行它以查看它是否会破坏测试来测试测试。

但是,这不是您可以设置为在 CI 服务器上运行的东西 - 它需要在命令行上进行设置,如果不显示其 GUI 就无法运行,只能将结果打印到 GUI 上,而且运行时间也很长。

0 投票
1 回答
12373 浏览

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

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

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

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

我试过了:

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

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

0 投票
1 回答
365 浏览

java - µJava 不是要杀死 Mutants 吗?

我正在使用µJava对我的 java 程序进行突变测试。因为我正在学习突变测试。

我有 2 节课

1:父母

和 2:儿童

我正在应用muJava的IOD操作。`因此它正在生成突变体。它正在删除子类的重写方法 printTemp。

我的测试用例是:

但是当我运行突变测试时,我发现突变体还活着。我想杀了它!我能做些什么 ??

0 投票
0 回答
181 浏览

gruntjs - 使用 gulp 进行 NodeJS 的突变测试

是否有任何节点模块可用于使用类似于 grunt-mutation-testing 的 gulp 进行突变测试?

因为我正在使用 gulp 任务来报告突变覆盖率,但没有找到任何材料。