我正在尝试对一个方法进行单元测试,该方法根据在其中创建的对象的值而具有不同的分支。下面的代码演示了它。
public class AClass {
public void method2() {
//Some code goes here
}
public void method1(BClass bObject) {
C_Class cObject = bObject.someMethodThatReturnsC();
if(cObject != null) {
method2();
method2();
}
}}
下面是测试类:
public class AClassTest {
@InjectMocks
AClass AClassSpy;
@Mock
BClass b_objectMock;
@Mock
C_Class c_objectMock;
@BeforeMethod
public void beforeMethod() {
AClassSpy = spy(new AClass());
MockitoAnnotations.initMocks(this);
}
public void method1Test () {
doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC());
AClassSpy.method1(b_objectMock);
verify(AClassSpy, times(2).method2();
}
}
但是,它总是失败,因为 c_objectMock 始终为 null。我该怎么做才能告诉 Mockito 不要返回 null 对象?
最佳答案
效果很好,只需使用 @Before
来自 junit 的注释,而不是 @BeforeMethod
,并标记您的测试方法,如 @Test
并从
中删除第二个括号
doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC())<-this one;
并在验证处添加括号:
verify(AClassSpy, times(2)<-here.method2();
只要照顾好你的代码就可以了!
这应该有效:
public class AClassTest {
@InjectMocks
private AClass AClassSpy;
@Mock
private BClass b_objectMock;
@Mock
private C_Class c_objectMock;
@Before
public void beforeMethod() {
AClassSpy = spy(new AClass());
MockitoAnnotations.initMocks(this);
}
@Test
public void method1Test() {
doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC();
AClassSpy.method1(b_objectMock);
verify(AClassSpy, times(2)).method2();
}
}
您可以使用注释 @RunWith
代替 before 方法。看起来很清楚:
@RunWith(MockitoJUnitRunner.class)
public class AClassTest {
@Spy
@InjectMocks
private AClass AClassSpy;
@Mock
private BClass b_objectMock;
@Mock
private C_Class c_objectMock;
@Test
public void method1Test() {
doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC();
AClassSpy.method1(b_objectMock);
verify(AClassSpy, times(2)).method2();
}
}
关于java - 如何告诉 Mockito Mock 注释返回一个不为 null 的模拟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943139/