这个问题是关于 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/