我正在尝试对一个方法进行单元测试,根据在其中创建的对象的值,该方法有不同的分支。下面的代码演示了它。
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();
}
}}
下面是TestClass:
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始终为空。我该怎么做才能告诉Mockito不要返回空对象?
您之所以出现这种行为,是因为您没有模仿对someMethodThatReturnsC
的属性调用。
应该是:
doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC();
它工作得很好,只需使用jUnit中的@前
注解,而不是@Before方法
,并将您的测试方法标记为@test
并从do的第二个括号中删除(c_objectMock)。当(b_objectMock)。
这应该行得通:
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();
}
}
问题内容: 因此,我正在像这样在类级别上将模拟对象创建为静态变量…在一个测试中,我想返回某个值,而在另一个测试中,我希望它返回一个不同的值。我遇到的问题是,似乎我需要重建模拟才能使其正常工作。我想避免重建模拟,只在每个测试中使用相同的对象。 在第二个测试中,当调用testObj.bar()时,我仍然收到0作为值。解决此问题的最佳方法是什么?请注意,我知道我可以在每个测试中使用不同的模拟,但是,我必
然后,在我的测试中,我执行调用的代码。而测试就是在那条线上失败了。我做错了什么?
如何模拟返回已强制转换的模拟对象的方法。 试验方法。
问题内容: 我有一个文件夹,其中包含index.js和几个模型(类)index.js book.js author.js 问题在于Author类似乎找不到书!它只是一个空对象。但是,如果我在index.js中切换导出,则将Book放在Author之后- 可以,但是其他模型将停止工作。 我不想做任何骇客工作。 问题答案: 这是因为您具有循环依赖关系。Node.js以非常特定的方式处理此问题: 第一个
在python 3.x中,通常使用函数的返回类型注释,例如: “void”类型的正确注释是什么? 我正在考虑三种选择: