gpt4 book ai didi

java - 为什么 JUnitCore 只返回第一个结果?

转载 作者:行者123 更新时间:2023-12-02 03:41:04 25 4
gpt4 key购买 nike

我使用 JUnit 4 和 Eclipse JDT 来创建自动化 Mutant 测试。

以下是我的代码结构的总体概述:

//Basic for loop
for(int i = 0; i < 10; i++) {

//Read in source code from a Java file
...(works)

//Change a line using JDT and save code to a new Java file
...(works)

//Compile new Java file (this also works)
try {
Process compile = Runtime.getRuntime().exec("javac -cp \"src/*\" " + path + "*.java");
compile.waitFor();
} catch(IOException ex) { /*...*/ }
catch(InterruptedException ex) { /*...*/ }

//Run JUnit Tests (this works the first time it is called)
JUnitCore core = new JUnitCore();
Result result = core.run(JUnitTest.class); //This class contains my JUnit Tests
}

我上面的代码适用于第一个测试,但此后的每个测试总是返回相同的结果。为什么即使进行了不同的突变,也没有产生新的结果?

我尝试过的事情:

  1. 测试每次循环迭代时是否进行不同的突变。

  2. 在运行测试之前测试新代码是否已编译。

  3. 将 for 循环的内部作为线程运行,等待该线程完成,然后运行下一个测试。

  4. 使用 JUnitCore.runClasses(JUnitTest.class) 代替创建 core 实例并调用 core.run(JUnitTest.class): p>

    JUnitCore core = new JUnitCore();
    Result result = core.run(JUnitTest.class);
  5. 用 JUnitCore (org.junit) 代码替换 TestRunner (junit.textui),这给了我同样的问题:

    TestSuite suite= new TestSuite();
    suite.addTestSuite(JUnitTest.class);
    TestResult result = TestRunner.run(suite);

最佳答案

您需要将突变体插入 JVM - 尽管您正在编译修改后的文件,但 JVM 只会看到第一个加载的版本。

有多种方法可以做到这一点,从为每个突变体启动新的 JVM 到使用检测 API。

关于java - 为什么 JUnitCore 只返回第一个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com