簡體   English   中英

JMockit:如何將MockUp類注入到測試類中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM