我是JMockIt的新手,正在尝试弄清楚/理解如何将@Injectable用于我已经定义的顶级MockUp类。
例如:
// 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";
}
}如果我尝试上述操作,我会得到一个错误
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)但是如果我删除了new ResultsApiWrapper(),那么我就不知道如何指定哪个类是我想要用作我的模拟的自动线缆实现的类。
我是不是误解了该怎么做?如何指定我希望JMockit使用我的MockUp<>实现进行自动布线?
发布于 2015-09-30 14:16:07
我也是新手,但我想这样的东西在你的情况下是可行的。这将模拟ResultsAPIWrapper(),并且不初始化任何静态变量,并为load()创建特定的模拟:
new MockUp<ResultsAPIWrapper>() {
@Mock
void $clinit() {
//disable static initialization
}
@Mock
public String load() {
return "done";
}
};https://stackoverflow.com/questions/32828699
复制相似问题