[英]Is it possible to Declare but not Instatiate a Spied Object in Mockito using @Spy Notation?
我正在為遺留代碼編寫一些JUnit測試,並且非常喜歡使用批注。 我想知道是否可以為一個間諜對象創建一個聲明,然后實例化它。 我問的原因是因為我有一個帶有非null構造函數的類。 在設置好測試用例之后,才知道此構造函數的值。 下面的代碼顯示了我想做的事情:
@RunWith(MockitoJUnitRunner.class)
public class ObjectUndertestTest {
@Spy private SomeClassToSpy someClassToSpy;
private Integer parameterOne;
private Integer parameterTwo;
@Before
public void setupTest() {
parameterOne = 1;
parameterTwo = 2;
someClassToSpy = new SomeClassToSpy(parameterOne, parameterTwo);
}
}
我能看到的唯一方法是混合語法並使用傳統的spy(對象進行模擬)表示法。 那是:
@RunWith(MockitoJUnitRunner.class)
public class ObjectUndertestTest {
private SomeClassToSpy someClassToSpy;
private Integer parameterOne;
private Integer parameterTwo;
@Before
public void setupTest() {
parameterOne = 1;
parameterTwo = 2;
someClassToSpy = new SomeClassToSpy(parameterOne, parameterTwo);
SomeClassToSpy spySomeClassToSpy spy(someClassToSpy);
}
}
或類似的東西。 有什么想法嗎?
請注意, @Spy
並不是真正的文檔注釋:這是MockitoJUnitRunner(et al) 根據其記錄的使用模式為您自動初始化間諜的說明 。 盡管注釋是有用且有用的,但我認為使用注釋的名稱而不是語義可能會引起更多的混亂。
就是說,如果只是使用您選擇的構造函數參數構造實例,則可以直接並顯式調用構造函數,並使用Mockito的初始化將其包裝在間諜程序中(如@Spy docs ):
@Spy private SomeClassToSpy someClassToSpy = new SomeClassToSpy(1, 2);
盡管您應該偏愛@Before方法而不是類初始化程序或構造函數,但這是一種明確記錄的初始化方法,並且不太可能導致測試污染或初始化順序問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.