在Mockito测试用例中,将BClass注入AClass。我想为b.doSomething()定义一个返回值,该返回值将在a.askBSomething()中调用。
但是,我的AClass没有构造函数,因此我无法在单元测试中将b传递给a。有没有解决方法?
@RunWith(MockitoJUnitRunner.class)
public class AClassTest {
@Mock
BClass b;
@InjectMocks
AClass a = new AClass();
@Before
public void setUp() throws Exception {
when(b.doSomething()).thenReturn("something");
}
@Test
public void test() {
assertTrue(a.askBSomething());
}
}
public class AClass {
@Inject
private BClass b;
public boolean askBSomething() {
String result = b.doSomething(); // result will be null instead of "something"
//.....
}
}
谢谢。
答案 0 :(得分:1)
是的,有。
您可以在调用AClass的c'tor之后使用反射在AClass中设置模拟。
只需添加以下方法,然后在setUp()中调用它即可。
private void setMockB(AClass objectA, BClass mockB)
{
Field bField = AClass.class.getDeclaredField("b");
bField.setAccessible(true);
bField.set(objectA, mockB)
}
或者,您可以为b添加一个公共设置器,然后在setUp()中调用它。