簡體   English   中英

使用Mockito的最佳做法

[英]Best practices using Mockito

我有一個關於在不同的測試類上使用Mock實例化的最佳實踐的問題。

假設我有一個名為PropertiesLoader的類的Mock

 @Mock
 private PropertiesLoader propertiesLoader;

我想從兩個不同的Test類的名為getkey()的類中調用一個函數。 (TestCrypter)和(TestUserService)

我應該在兩個類上實現以下方法嗎?

public class TestCrypter{

@Mock
private PropertiesLoader propertiesLoader

@Test
public void firstTest(){
  Mockito.when(propertiesLoader.getKey()).thenReturn("123");
 }
}


public class TestUserService{

@Mock
private PropertiesLoader propertiesLoader

@Test
public void firstTest(){
  Mockito.when(propertiesLoader.getKey()).thenReturn("123");
 }
}

還是有一種更清潔,更好的方法來做到這一點?

提前致謝!

對我來說,如果我們談論測試,那么重復的代碼就可以了。

主要目標是保持測試類的表現力和易於閱讀,因此有時最好在測試類中保留一些冗余代碼,而不用花哨的抽象和工具。

在您的情況下,“何時”定義了特定於測試的行為,因此應將其存儲在同一位置(因為測試結果可能取決於此),因為外部測試將很難讀取和維護。

但是,如果使用PropertiesLoader確實很常見,請考慮創建一個涵蓋這些調用的抽象類(或某些類),但是將其參數化(以保持測試邏輯分離)。

考慮使用@Before方法來設置適用於多個(和/或所有)測試的@Before 在您的示例中,我將考慮使用以下內容:

@Before
public void preTestSetup()
{
    // init the mocks.
    // Not required if you are using the MockitoJunitRunner.
    MockitoAnnotations.initMocks(this);

    // I prefer doReturn.when over when.thenReturn.
    Mockito.doReturn("123").when(propertiesLoader).getKey();

    // if you'd like, use this instead of the doReturn above:
    Mockito.when(propertiesLoader.getKey()).thenReturn("123");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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