2016-12-14 209 views
0

我如何用B模擬構造函數參數來模擬A?我如何用B模擬作爲構造函數參數來模擬A?

private B actionContext; 
private A target; 

@BeforeEach 
void setUp() { 
    actionContext = mock(B.class); 
    target = mock? 
} 

public class A {//... 
    public A(B b){//... 
    } 
} 
+0

您正在測試使用A調用B方法的類A或其他類嗎? –

+0

@EdwinMiguel我正在測試A類。 – ArthurDn

+0

您不需要模擬A類,只需在A構造函數中添加B模擬 –

回答

0

您可以使用註釋的Mockito

@Mock 
private B mockB; 

@Spy 
@InjectMocks 
private A testObj = new A(mockB); 

搭建測試行爲setUp方法... 時(mockB.method())thenReturn()。

+0

正如我所看到的,新的A(mockB)不是一個模擬,但我需要它也嘲笑。 – ArthurDn

+0

@ArthurDn從我的理解當你試圖測試一個類,你不想嘲笑這個類 - 你想嘲笑它的依賴關係,所以你可以孤立地測試它 – dreamer

+0

同意,但如果你的方法Aa使用方法Ab你想爲他們編寫單獨的測試嗎? – ArthurDn

0

,如果你想嘲笑class A方法,你不必嘲笑class B

嘲諷class A足夠

@BeforeEach 
void setUp() { 
    A mockedA = mock(A.class); 
} 

如果你想使用的class B嘲笑方法可以單獨嘲笑它

@BeforeEach 
void setUp() { 
    A mockedA = mock(A.class); 
    B mockedB = mock(B.class); 
} 

也會建議您閱讀Mockito docs瞭解模擬原則。