java - Java 困惑突变测试框架可能出现的类加载器问题

标签 java integration-testing mutation-testing

这个问题是关于 jumble mutation testing framework ( http://jumble.sourceforge.net/ )

我正试图混入我工作中的项目。 我在其中一个项目的类上运行困惑,它对某些类执行突变,但对于其他一些类,它告诉

"test class is broken"

尽管我用 ant 任务运行那些测试类并且它们运行正常。

我试图知道出了什么问题,并开始在 eclipse 上以 Debug模式运行 jumble,以便为每个 jumble 报告其测试被破坏的类运行。 当我调试这些类时,我进入了 junit 类 TestResult 的实例字段,这样我就可以看到 junit 在 jumble 运行测试类时报告的错误和失败的描述,因为 jumble 告诉我“测试类已损坏”但它没有告诉为什么它说测试类坏了,所以我需要调试才能知道发生了什么。我观察到的问题和错误详细信息是失败测试困惑的结果,如下所示:

(由于我工作的公司的法律限制,我无法发布某些代码片段,但我会尽力提供更多解释)

对于“Forwarder”类,我在 Debug模式下运行 jumble 并顺利运行并完美地进行了修改。这是最让我感到惊讶的情况,因为当使用 ant 任务 jumble 运行时会报告我“测试类已损坏”,但在 eclipse 的 Debug模式下运行正常。

对于类 Action 和许多其他类,在 Debug模式下,在运行测试类时会发生错误,并且在检查错误描述时,错误是

java.lang.ClassNotFoundException: org.junit.rules.ExpectedException.

我在 junit jar 上有那个类,它的路径可用于 eclipse Debug模式和 ant 任务。 另外,这个类在 selenium 框架的一个 jar 中,它有它的依赖项 我认为可能是类加载器无法决定加载哪个版本的类。但我不确定。

对于类模块,我做同样的事情:当测试由 jumble 运行并完成执行时,检查 TestResult junit 类上可用的错误消息。对于这门课,我得到:

java.lang.LinkageError: loading constraint violation: loader "com/reeltwo/jumble/mutation/MutatingClassLoader@5b8d5b8d" previously initiated loading for a different type with name "org/hamcrest/Description" defined by loader "sun/misc/Launcher$AppClassLoader@7fce7fce"

这个错误让我很吃惊。这让我觉得 Jumble 有自己的类加载器,也许它会以某种方式成为我的一些麻烦的根源。

我真的很感激任何形式的帮助, 马科斯

最佳答案

Jumble 使用自定义类加载器插入突变,这可能是您出现某些问题的原因。

它还嵌入了自己的 junit 版本,这可能是您的 classnotfound 异常的原因。没有更多信息,很难确定。

您可以尝试通过 Jumble 邮件列表询问开发人员,或者试试 PIT http://pitest.org .

PIT 使用检测 API 而不是使用类加载器插入突变,不嵌入 JUnit,而且通常速度要快得多。我写了它,所以可能非常有偏见。

关于java - Java 困惑突变测试框架可能出现的类加载器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988627/

相关文章:

java - 链接列表的编码约定

java - .getPixel() 的更好替代方案?

java - 扫描仪仅读取第一组输入

iPhone 命令行单元测试(和文件 I/O)

java - 如何从 junit 中的 java 扩展文件中读取和测试类?我怎样才能访问该类进行测试?

.net - FSharp.Compiler.Service 编译为 dll 错误

java - 如何返回代码中的某个位置

c++ - 当测试技术性很强时,为什么要使用 FitNesse?

integration-testing - 在 SONAR 中使用 Jacoco 的 IT 测试覆盖率为 0%

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