2 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
調(diào)用的時(shí)候when(spyClass.functionB(any(),any()).thenReturn(mockString)確實(shí)會(huì)走debug模式下的real方法。但是這個(gè)方法被嘲笑了,你functionA得到了mockString. 它確實(shí)有效。我真的不明白為什么看到你可以進(jìn)入調(diào)試模式是一個(gè)問(wèn)題。
要回答這個(gè)問(wèn)題,使用mock不會(huì)通過(guò)該方法:
Class mockClass = mock(Class.class);
when(mockClass.functionB(any(),any())).thenReturn(mockString);
when(mockClass.functionA(arguments)).thenCallRealMethod();
mockClass.functionA(arguments);
但是:這是一個(gè)非常糟糕的測(cè)試,你永遠(yuǎn)不需要這樣做(間諜或模擬)。如果您測(cè)試一個(gè)類(lèi),那么您將測(cè)試所有類(lèi)。 如果您需要模擬一個(gè)方法來(lái)測(cè)試另一個(gè)方法,那么其中一個(gè)方法可能屬于另一個(gè)類(lèi)。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
或者在測(cè)試類(lèi)的情況下。ClassA 有一個(gè)在 methodB() 內(nèi)部調(diào)用的 methodA() 并且您對(duì) methodB() 內(nèi)部發(fā)生的所有事情都不感興趣,那么您可以簡(jiǎn)單地對(duì)代表當(dāng)前被測(cè)類(lèi)的對(duì)象使用間諜,然后設(shè)置 methodB 的自定義行為() 用于例如。Mockito.doNothing().when() + @Spy。
@InjectMocks
@Spy
private ClassA testObj;
@BeforeEach
public void setUp() {
super.setUp();
// the actual call of the methodB() will be totally ignored
doNothing().when(testObj).methodB(input);
}
@Test
public void methodTest() {}
添加回答
舉報(bào)