我对EasyMock(3.1)类的模拟有些困难。这应该适用于模拟部分类实现,我认为,这对于单元测试抽象基类,同时模拟缺少的方法是非常理想的。这是一个模式-一个立即识别的经典...
public interface Interface {
public void intfMethod();
}
public abstract class AbstractBase implements Interface {
public void otherMethod() {
// do some stuff we need to test...
intfMethod();
}
}
现在的测试是:
public class TestAbstractBase {
AbstractBase testInstance;
@Before
public void setUp() {
testInstance =
createMockBuilder(AbstractBase.class).addMockedMethod("intfMethod").createMock();
}
@Test
public void testOtherMethod() {
testInstance.intfMethod(); // expect this to be invoked on the mock...
replay(testInstance);
testInstance.otherMethod();
verify(testInstance);
}
}
EasyMock似乎不喜欢这样。它抛出:
java.lang.IllegalArgumentException: Method not found (or private): intfMethod
at org.easymock.internal.MockBuilder.addMockedMethod(MockBuilder.java:78)
at TestAbstractBase.setUp(TestAbstractBase.java:19)
有什么想法吗?我发现了一个相关的问题,但它并不是真正公正的标题。
多谢@nhaldimann;我忽略了文档中的这个无伤大雅的语句,即“抽象方法在默认情况下被方便地嘲弄”。所以上面所有的需要就是去除显式模拟接口方法的尝试,如:
testInstance = createMockBuilder(AbstractBase.class).createMock();
在对此进行研究时,我遇到了另外两种变通方法--尽管上面的方法显然更可取:
>
使用更强的AddMockedMethod(Method)
API,如:
public void setUp() throws Exception {
Method m = AbstractBase.class.getMethod("intfMethod");
testInstance = createMockBuilder(AbstractBase.class).addMockedMethod(m).createMock();
}
显式公开AbstractBase
中的IntfMethod
方法
这两个变通方法表明,我最初的问题是EasyMock方面的一个bug。但是,由于不需要在第一个实例中模拟该方法,我们将说这是“用户(my)错误”。
我已经研究了接口、抽象类和继承的用法。我知道每一种都有其用途,但我还是有点困惑。 我知道一般一个类只能扩展另一个类,虽然有些可能支持多个继承,但它可以实现多个接口(这可能是使用接口的主要原因)。然而,如果我是正确的,这个类也可以被另一个类扩展。我还看到抽象类可能比接口更快,并且可以有非静态的最终变量。 所以,我仍然不确定什么时候使用哪个更好。也许通过举例可以更好地理解这一点。我不反对使用任何东西,
人们经常会问AspectJ这样的问题,所以我想在以后可以轻松链接到的地方回答。 我有这个标记注释: 现在我像这样注释接口和/或方法: 这是一个小驱动程序应用程序,它也实现了接口: 现在当我定义这个方面时,我希望它被触发 对于带注释类的每个构造函数执行和 每次执行带注释的方法。 不幸的是,方面没有打印任何内容,就像类
问题内容: 我有以下界面: 我在下面有抽象类(没有提到方法插入): 我有具体的课程: 最后,SpecificEntryBean定义为: 我有以下错误: 类型SpecificEntry必须实现继承的抽象方法SingleRecordInterface.insert(AbstractEntryBean) 考虑到SpecificEntryBean扩展了AbstractEntryBean,所以我不明白此错误
如何使用Mockito或PowerMock模拟一个由子类实现,但从抽象超类继承的受保护方法? 换句话说,我想测试“DoSomething”方法,同时嘲弄“DoSomethingElse”。 抽象超类 子类实现 解决方案 这里给出的答案是正确的,如果涉及的类是在同一包中,将会起作用。 但如果涉及不同的包,一个选择是使用PowerMock。下面的例子对我有效。当然可能有其他的方法,这是一个可行的。 注
继承一个可以实现的普通超类有什么不同吗? atm我有一个名为的抽象类,我有/扩展这个。 abstractcar中的一个字段设置为"私有int容量" 但是在子类“小型汽车”中,当我输入“容量”作为构造函数中使用的变量时,它说“容量在抽象汽车中有私有访问” 我想: > 子类继承超类的所有字段和方法? 我现在该怎么进行?
问题内容: 人们经常会问诸如此类的AspectJ问题,因此我想在一个我以后可以轻松链接的地方回答它。 我有这个标记注释: 现在,我注释这样的接口和/或方法: 这是一个小的驱动程序应用程序,它也实现了该接口: 现在,当我定义此方面时,我希望它会被触发 为每个构造函数执行带注释的类,并 每次执行带注释的方法。 不幸的是,方面没有打印任何内容,就像类Application和方法two()没有任何@Mar