是否可以在构造函数中使用mock ?
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 !
}
}
我该怎么做呢?
这种设计是难以模仿的,它揭示了被测类中可能存在的设计缺陷,或者至少是弱点。它可能会调用某种注入框架(例如Spring),因此您不会显式调用B构造函数。然后,您的第二次测试尝试将在
上进行。如果Spring太重,还有更轻的注入框架。或者最后,您可以将B作为a的构造函数参数传入,然后您必须在将B传递给a构造函数之前使用Mockito.mock(B类)来生成B模拟(然后您将放弃使用mockitto注释)。
我不明白你到底想做什么,但你的第二种方法是正确的。只有您需要像实例化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 !
}
}