是否可以在构造函数中使用模拟?
Class A{
public B b = new B();
public A( String input ){
//I need to stub this method
b.someMethod( input );
}
// Class implementations
}
单元测试:
Class ATest{
@Mock
B b;
@InjectMock
A a;
//option1:
@Before
setup(){
MockitoAnnotations.initMocks( this ); //Fails - since A isnt instantiated
a = new A();
}
//option2:
@Before
setup(){
a = new A();
MockitoAnnotations.initMocks( this ); // Fails in new A() due to method i want to stub as mocks werent initialized yet !
}
}
我该如何处理?提前谢谢。
答案 0 :(得分:7)
这种设计难以嘲笑,并且揭示了您所选课程中可能的设计缺陷或至少是弱点。它可能需要某种注入框架(即Spring),因此您不会显式调用B构造函数。那么你的第二次测试就会出现在
上如果Spring太沉重,那么注入框架会更轻。或者最后,您可以将B in作为A的构造函数参数传递。然后,您必须使用Mockito.mock(B.class)将B模型传递给A构造函数(然后您将放弃使用Mockito注释)。
答案 1 :(得分:0)
我不确切地理解你要从中做什么,但你的第二种方法是正确的。只需要像对A类一样实例化B类。所以,基本上这就是你需要做的所有事情:
//option2:
@Before
setup(){
a = new A();
b = new B();
MockitoAnnotations.initMocks( this ); // Fails in new A() due to method i want to stub as mocks werent initialized yet !
}
}