我有一个简单的玩具课,目的是研究EvoSuite如何自动进行单元测试。
该类如下:
package mylib;
public class ClassWithInterfaceField {
private InterfaceExample example;
private ClassWithInterfaceField(InterfaceExample example) {
this.example = example;
}
public int getSwag() {
return example.getValue(null, 20);
}
public int performSwagAndLog(int swag) {
example.performSwag();
System.out.println("hmmm");
return swag + 1;
}
}
其中InterfaceExample
在单独的文件中定义如下:
package mylib;
public interface InterfaceExample {
void performSwag();
int getValue(InterfaceExample example, int flag);
}
EvoSuite似乎无法为ClassWithInterfaceField
生成任何测试。
即使我在控制台参数中添加-Dp_functional_mocking=1.0 -Dp_reflection_on_private=1.0 -Dreflection_start_percent=1.0 -Dfunctional_mocking_percent=1.0
,EvoSuite似乎也无法按预期模拟InterfaceExample
,因为EvoSuite的输出似乎总是如下:
package mylib;
import org.junit.Test;
import static org.junit.Assert.*;
import org.evosuite.runtime.EvoRunner;
import org.evosuite.runtime.EvoRunnerParameters;
import org.junit.runner.RunWith;
@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, separateClassLoader = true, useJEE = true)
public class ClassWithInterfaceField_ESTest extends ClassWithInterfaceField_ESTest_scaffolding {
@Test
public void notGeneratedAnyTest() {
// EvoSuite did not generate any tests
}
}
我已经在线阅读了EvoSuite能够使用Mockito模拟接口的功能。 EvoSuite支持模拟是真的吗?我需要怎么做才能为此类生成测试?