2016-12-14 207 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了解模拟原则。