我试图为一个最常见的场景编写一个单元测试。
class A{
protected void m1() {
//something
}
}
//class A is from a different/external binary
class B extends A {
@Autowired Properties props
public void m2() {
//something
if(props.getSomething()) {
m1();
}
}
}
class BTest {
@Mock Properties props;
@Test
public void testM2() {
MockB b = mock(MockB.class);
doNothing().when(b).m1();
when(b.m2()).thenCallRealMethod();
when(props.getSomething()).thenReturn(1);
}
class MockB extends B {
@Override
public void m1() {
return;
}
}
}
问题是,到目前为止,测试失败了。当我试着调试测试时,我观察到null被注入到props中,这导致了NPE。当我从测试中删除类实现时,我可以看到props mock工作正常,但在m1()调用中失败了。有人能帮我一下我缺少什么吗?我试着用MockB b引用道具,比如b.props,但这也是NPE。非常感谢您的帮助。
我只使用mockito,你不需要模拟类,下面应该工作
class BTest {
@Mock
private Prop props;
@Test
public void testM2() {
B bSpy = spy(new B(props));
when(props.getSomething()).thenReturn(1);
doNothing().when((A) bSpy).m1();
doCallRealMethod().when(bSpy).m2();
bSpy.m2();
}
}
如果您使用over. m1()
,这将不起作用
我有两个不同包的亲子班。我正在重写受保护类型的方法。我想访问子类中的超类保护方法。 考虑以下代码: 认为我是Java新手,并在main方法中提供替代comment的答案。
我尝试模拟父类的受保护方法。因此,我使用&。我的家长班。
问题内容: 关键字授予对相同包和子类(http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html)中的类的访问权限。 现在,每个类都有一个超类(http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html)。 因此,我得出结论,即使每个类都可以访问的方法。
问题内容: 下面的代码由于某种原因给我一个错误,有人可以告诉我这是什么问题。 基本上,我创建了2个Point&Circle类。Circle正在尝试继承Point类。 错误: 问题答案: 看起来您可能已经修复了原始错误,该错误是由错误消息所指示的,尽管您的修复稍有不正确,而不是应该使用的类。 请注意,在的方法中还有一个错误调用的地方: 这在Python 3上是有效的代码,但是在Python 2上需要
我正在阅读这本Java SCJP的书,我偶然发现了以下内容: 但是我得到了这个错误: 那么,出什么问题了?
如何使用Mockito或PowerMock模拟一个由子类实现,但从抽象超类继承的受保护方法? 换句话说,我想测试“DoSomething”方法,同时嘲弄“DoSomethingElse”。 抽象超类 子类实现 解决方案 这里给出的答案是正确的,如果涉及的类是在同一包中,将会起作用。 但如果涉及不同的包,一个选择是使用PowerMock。下面的例子对我有效。当然可能有其他的方法,这是一个可行的。 注