Java JMockit:如何将模型类注入到测试类中?
我是JMockIt的新手,正在试图弄清楚/理解如何将Java JMockit:如何将模型类注入到测试类中?,java,unit-testing,junit,dependency-injection,jmockit,Java,Unit Testing,Junit,Dependency Injection,Jmockit,我是JMockIt的新手,正在试图弄清楚/理解如何将@Injectable用于我已经定义的顶级模型类 例如: // JUnit Test Class public class RepositoryTest { @Tested private Repository repository; @Injectable private ResultsAPIWrapper resultsApiWrapper; @Test public void testRepo(){
@Injectable
用于我已经定义的顶级模型类
例如:
// JUnit Test Class
public class RepositoryTest {
@Tested private Repository repository;
@Injectable private ResultsAPIWrapper resultsApiWrapper;
@Test
public void testRepo(){
new ResultsApiWrapper();
assertThat(repository.doSomething(), is("done" ) );
}
}
// Class under test
public class Repository{
@Autowired private ResultsAPIWrapper resultsApiWrapper;
public String doSomething(){
return resultsApiWrapper.load();
}
}
// Mocked implementation of the ResultsAPIWrapper that I want injected into Repository
public class ResultsApiWrapperMock extends MockUp<ResultsAPIWrapper>{
@Mock
public String load(){
return "done";
}
}
//JUnit测试类
公共类存储测试{
@测试专用存储库;
@可注入私有ResultsAPIWrapper ResultsAPIWrapper;
@试验
公开无效测试报告(){
新的ResultsApiWrapper();
断言(repository.doSomething(),是(“完成”);
}
}
//正在测试的类
公共类存储库{
@自动连线专用ResultsAPIWrapper ResultsAPIWrapper;
公共字符串doSomething(){
返回resultsApiWrapper.load();
}
}
//我想要注入到存储库中的ResultsAPIWrapper的模拟实现
公共类ResultsApiWrapperMock扩展了实体模型{
@嘲弄
公共字符串加载(){
返回“完成”;
}
}
如果我尝试上面的方法,我会得到一个错误
java.lang.IllegalArgumentException: Class already mocked: com.fw.wrappers.ResultsAPIWrapper
at com.fw.wrappers.mock.ResultsApiWrapperMock.<init>(ResultsApiWrapperMock.java:12)
at com.fw.repository.RepositoryTest.testRepo(RepositoryTest.java:38)
java.lang.IllegalArgumentException:类已被模拟:com.fw.wrappers.ResultsAPIWrapper
位于com.fw.wrappers.mock.ResultsApiWrapperMock。(ResultsApiWrapperMock.java:12)
位于com.fw.repository.RepositoryTest.testRepo(RepositoryTest.java:38)
但是如果我删除了新的ResultsApiWrapper()
,那么我不知道如何指定要用作autowire模拟实现的类
我是不是误解了怎么做?我如何指定我希望JMockit使用我的
模型实现进行自动连线?我也是新手,但我认为在您的情况下,类似的方法会起作用。。。
这将模拟ResultsAPIWrapper(),而不是初始化任何静态变量,并为load()创建特定的模拟:
新模型(){
@嘲弄
void$clinit(){
//禁用静态初始化
}
@嘲弄
公共字符串加载(){
返回“完成”;
}
};
有一件事我没有试过,但它仍然不起作用。JMockit仍然抱怨ResultsAPIWrapper已经被模拟(由于@Injectable字段)。
new MockUp<ResultsAPIWrapper>() {
@Mock
void $clinit() {
//disable static initialization
}
@Mock
public String load() {
return "done";
}
};