2

我在编写 junit 测试时遇到了 EasyMock 的意外行为。最后,我删除了几行代码,直到剩下一行create mock 看看发生了什么。

@Test
public void testSimple() throws Exception {
    Socket socket = EasyMock.createMock(Socket.class);
}

这个junit测试产生错误:

[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.052 sec

当我只有正常的实例化时,情况并非如此:

@Test
public void testSimple() throws Exception {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
}

这个junit测试似乎对此很满意:

[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.047 sec

我想知道是否有人可以消除这种歧义。谢谢。

4

3 回答 3

4

您正在尝试模拟一个具体的类(Socket 不是接口),因此您可能需要做一些额外的工作。

假设您使用的是 3.X 版本的 EasyMock,您可能需要添加类模拟所需的其他库:

cglib (2.2) 和 Objenesis (1.2) 必须在类路径中才能执行类模拟

于 2012-11-09T04:01:12.453 回答
3

如果要模拟具体类,则需要使用 EasyMock 类扩展

http://easymock.org/EasyMock2_2_2_ClassExtension_Documentation.html

链接显示如何。 http://helpdesk.objects.com.au/java/how-do-i-mock-a-concrete-class-using-easymock

于 2012-11-09T04:05:54.557 回答
2

As of EasyMock 3.0 (the current version is 3.2), you can mock concrete classes so you would not get this error now.

于 2014-04-02T09:08:51.283 回答