使用Mockito測試抽象類

n7w77 9年前發布 | 14K 次閱讀 Mockito 單元測試

想要測試一個抽象類,有什么好辦法可以不用真正繼承這個類就可以進行測試嗎?如果使用Mockito框架又要怎么做?

本文來自StackOverflow社區的問答。

問題:

我想測試一個抽象類。當然我可以寫一個繼承這個抽象類的mock。

我可以用mocking框架(我在用Mockito),而不是用手寫mock來做嗎?怎樣做?

采納答案:

以下的建議可以讓你不用創建“實際”的子類來測試抽象類 —— Mock就是子類。

使用Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS),然后就可以mock任何被調用的抽象method。

示例:

public abstract class My {
  public Result methodUnderTest() { ... }
  protected abstract void methodIDontCareAbout();
}

public class MyTest {
    @Test
    public void shouldFailOnNullIdentifiers() {
        My my = Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS);
        Assert.assertSomething(my.methodUnderTest());
    }
}

注意:這個方法的美妙之處就是只要抽象methods沒有被調用,你就不實現執行他們。

依小弟愚見,這比使用spy更加簡潔,因為spy需要實例,也就是說你必須為你的抽象類創建一個可以實例化的子類。

原文鏈接: http://stackoverflow.com/questions/1087339/using-mockito-to-test-abstract-classes 翻譯: ImportNew.com - Brook
譯文鏈接: http://www.importnew.com/15353.html

 本文由用戶 n7w77 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!