本文介紹了JUnit跳過方法-在測試中調用injectmock-方法的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個@InjectMocks cut
,這是我要測試的類。它有一個deleteX()
和一個init()
方法。
deleteX()
在完成之前正在調用init()
-我如何在測試中跳過此調用,因為每次我都只收到NullPointer Exception
。
public void deleteX() {
// some things
init();
}
我只想跳過它,因為我已經為它們都提供了測試方法,并且不想要大而重復的代碼。
我無法執行Mockito.doNothing().when(cut).deleteX();
,因為@InjectMocks
不是Mockobject
。
推薦答案
有一種方法可以實現您想要的–那就是”部分模仿”。有關詳細信息,請參閱此問題-Use Mockito to mock some methods but not others。
假設ClassUnderTest
如下:
class ClassUnderTest {
public void init() {
throw new RuntimeException();
}
public void deleteX() {
// some things
init();
}
}
此測試將通過:
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class ClassUnderTestTest {
@Spy
private ClassUnderTest classUnderTest;
@Test
public void test() throws Exception {
// given
doNothing().when(classUnderTest).init();
// when
classUnderTest.deleteX();
// then
verify(classUnderTest).init();
}
}
對使用@Spy
注釋的對象的所有方法調用都將是真實的,但模擬的方法除外。在這種情況下,init()
調用被模擬為不執行任何操作,而不是引發異常。
如果您需要向被測類注入依賴項,則需要通過@Before
方法來完成,例如:
private ClassUnderTest classUnderTest;
@Before
public void setUp() {
ClassUnderTest cut = new ClassUnderTest();
// inject dependencies into `cut`
classUnderTest = Mockito.spy(cut);
}
這篇關于JUnit跳過方法-在測試中調用injectmock-方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,