2

这个问题是关于混杂突变测试框架(http://jumble.sourceforge.net/

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

“测试班坏了”

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

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

(由于我工作的公司的法律限制,我不能发布某些代码,但我会尽量解释清楚)

对于“转发器”类,我在调试模式下运行 jumble 并且运行平稳并且完美地使突变。这是最让我惊讶的情况,因为当与 ant task jumble 一起运行时,会报告我“测试类已损坏”,但在 eclipse 中的调试模式下运行正常。

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

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

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

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

java.lang.LinkageError:加载约束违规:加载程序“com/reeltwo/jumble/mutation/MutatingClassLoader@5b8d5b8d”先前为加载程序“sun/misc/Launcher$ 定义的名称为“org/hamcrest/Description”的不同类型启动加载AppClassLoader@7fce7fce"

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

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

4

1 回答 1

0

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

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

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

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

于 2012-01-24T21:45:51.487 回答