簡體   English   中英

是否可以使用@Spy符號在Mockito中聲明但不能實例化Spied對象?

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

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