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