8
mockito中這兩個聲明有什麼區別?Mockito @Spy和@Mock的區別(answer = Answers.CALLS_REAL_METHODS)
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
mockito中這兩個聲明有什麼區別?Mockito @Spy和@Mock的區別(answer = Answers.CALLS_REAL_METHODS)
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
前面的CALLS_REAL_METHODS樣式創建一個未初始化的對象;沒有構造函數運行,也沒有設置字段。通常,這種語法是不安全的,因爲真正的實現將與可能構成無效或不可能狀態的未初始化字段交互。
後者@Spy風格允許您調用您選擇的構造函數,或Mockito將try to call a no-arg constructor if the field is uninitialized。然後將這些字段複製到生成的Spy(擴展了Spied-on類型)中,從而實現更安全和更逼真的交互。
必要提醒:實際上並不模擬Java集合的玩具例以外,並沒有忘記重寫間諜時使用doReturn
語法和CALLS_REAL_METHOD嘲笑要不你就叫when
調用中的實際方法。