[英]How to make JMockit inject a specific instance to a JMockit @Tested class?
[英]JMockit : How to inject a MockUp class into a tested class?
我是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()
那么我不知道如何指定哪個類我想用作autowire的模擬實現。
我誤解了怎么做嗎? 如何使用我的MockUp<>
實現指定我希望JMockit自動裝配?
我也是新手,但我覺得這樣的東西會適用於你的情況......這將模擬ResultsAPIWrapper()並且不初始化任何靜態變量並為load()創建一個特定的模擬:
new MockUp<ResultsAPIWrapper>() {
@Mock
void $clinit() {
//disable static initialization
}
@Mock
public String load() {
return "done";
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.