sxc*_*731 1 java unit-testing easymock
我在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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在测试:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我找到了一个相关的问题,但它并没有真正公正地标题......
非常感谢@nhaldimann; 我忽略了文档中这个无害的陈述,即"抽象方法默认情况下被嘲笑".因此,以上所有需求都是删除显式模拟接口方法的尝试,如:
testInstance = createMockBuilder(AbstractBase.class).createMock();
Run Code Online (Sandbox Code Playgroud)
在研究这个问题时,我遇到了另外两个解决方法 - 尽管上面显然更可取:
使用更强大的addMockedMethod(Method)API,如:
public void setUp() throws Exception {
Method m = AbstractBase.class.getMethod("intfMethod");
testInstance = createMockBuilder(AbstractBase.class).addMockedMethod(m).createMock();
}
Run Code Online (Sandbox Code Playgroud)明确地公开intfMethod方法AbstractBase
这两个解决方法表明我的初始问题是EasyMock方面的一个错误.但由于在第一个实例中不需要模拟该方法,我们会说这是"用户(我的)错误".
| 归档时间: |
|
| 查看次数: |
7247 次 |
| 最近记录: |