为什么 JUnitCore 只 return 第一个结果?
Why does JUnitCore only return the first results?
我正在使用 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
}
我上面的代码适用于第一次测试,但此后的每次测试总是 returns 相同的结果。为什么做了不同的突变却没有产生新的结果?
我尝试过的事情:
测试每次循环迭代都会产生不同的突变。
测试新代码编译前测试是运行.
运行 for循环内部作为一个线程,等待那个线程完成,然后运行下一个测试。
使用 JUnitCore.runClasses(JUnitTest.class) 代替创建 core 的实例并调用 core.run(JUnitTest.class):
JUnitCore core = new JUnitCore();
Result result = core.run(JUnitTest.class);
将 JUnitCore (org.junit) 代码替换为 TestRunner (junit.textui),这给了我同样的问题:
TestSuite suite= new TestSuite();
suite.addTestSuite(JUnitTest.class);
TestResult result = TestRunner.run(suite);
你为什么运行循环从i=0到i=10,
如果使用这个循环,那么你在哪里使用代码中的 i 的值。我认为这不使用 i 的值,每次都会导致相同的结果。
您需要将突变体插入 JVM - 虽然您正在编译修改后的文件,但 JVM 只会看到第一个加载的版本。
有多种方法可以做到这一点,从为每个突变体启动新的 JVM 到使用工具 API。
我正在使用 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
}
我上面的代码适用于第一次测试,但此后的每次测试总是 returns 相同的结果。为什么做了不同的突变却没有产生新的结果?
我尝试过的事情:
测试每次循环迭代都会产生不同的突变。
测试新代码编译前测试是运行.
运行 for循环内部作为一个线程,等待那个线程完成,然后运行下一个测试。
使用 JUnitCore.runClasses(JUnitTest.class) 代替创建 core 的实例并调用 core.run(JUnitTest.class):
JUnitCore core = new JUnitCore(); Result result = core.run(JUnitTest.class);
将 JUnitCore (org.junit) 代码替换为 TestRunner (junit.textui),这给了我同样的问题:
TestSuite suite= new TestSuite(); suite.addTestSuite(JUnitTest.class); TestResult result = TestRunner.run(suite);
你为什么运行循环从i=0到i=10, 如果使用这个循环,那么你在哪里使用代码中的 i 的值。我认为这不使用 i 的值,每次都会导致相同的结果。
您需要将突变体插入 JVM - 虽然您正在编译修改后的文件,但 JVM 只会看到第一个加载的版本。
有多种方法可以做到这一点,从为每个突变体启动新的 JVM 到使用工具 API。