未调用java Mockito存根方法
我是莫基托的新手,在打短发方面遇到了麻烦。我想测试一个方法,但在该方法的一行上存根,这是对另一个类的方法的调用。根据下面的代码,我希望是可选的。empty(),但得到可选值。of(“str不应为空”)。我做错了什么
public class ClassA {
public String str;
public Optional<String> method1() {
if (str == null) {
return Optional.of("str should not be null");
}
return Optional.empty();
}
}
public class ClassB {
public String thing;
public Optional<String> method2() {
ClassA classA = new ClassA();
Optional<String> str2 = classA.method1();
if (str2.isPresent()) return str2;
if (thing == null) return Optional.of("thing should not be null");
return Optional.empty();
}
}
public class ClassBTest {
@Test
public void method1_test() {
ClassB classBSpy = spy(new ClassB());
ClassA classASpy = spy(new ClassA());
doReturn(Optional.empty()).when(classASpy).method1();
assertEquals(Optional.empty(), classBSpy.method2());
}
}
# 1 楼答案
为了使ClaasB中的ClassA存根有效,您需要一种将ClassA的Spy/Mock插入CLassB的方法,即通过构造函数:
但是测试仍然失败,因为
Optional.empty().isPresent()
是false
,而thing
是null
# 2 楼答案
您在这里提供的测试似乎执行成功,我不是Mockito专家,但我认为这主要是因为它将根据方法签名简单地存根方法,返回可选。空()并且不关心演员阵容
如果我理解正确的话,如果您想存根该方法的超级调用,我认为Mockito不支持这一点。关于这个here有一条线索。不过,你可以求助于PowerMockito,我相信它可能有这样的能力