java - 是否可以使用 EasyMock 创建一个实现多个接口(interface)的模拟对象?

标签 java unit-testing mocking rhino-mocks easymock

是否可以使用 EasyMock 创建一个实现多个接口(interface)的模拟对象?

例如接口(interface)Foo和接口(interface)Closeable

在 Rhino Mocks 中,你可以在创建 mock 对象时提供多个接口(interface),但 EasyMock 的 createMock() 方法只接受一种类型。

是否可以使用 EasyMock 来实现这一点,而无需求助于创建一个扩展 FooCloseable 的临时接口(interface),然后对其进行模拟?

最佳答案

虽然我基本上同意尼克霍尔特的回答,但我认为我应该指出 mockito允许通过以下调用执行您所要求的操作:

Foo mock = Mockito.mock(Foo.class, withSettings().extraInterfaces(Bar.class));

显然,当您需要将模拟用作 Bar 但该 Actor 不会抛出 时,您必须使用类型转换:(Bar)mock ClassCastException

这是一个更完整的例子,尽管完全荒谬:

import static org.junit.Assert.fail;
import org.junit.Test;
import static org.mockito.Mockito.*;
import org.mockito.Mockito;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import org.hamcrest.Matchers;

import java.util.Iterator;


public class NonsensicalTest {


    @Test
    public void testRunnableIterator() {
        // This test passes.

        final Runnable runnable = 
                    mock(Runnable.class, withSettings().extraInterfaces(Iterator.class));
        final Iterator iterator = (Iterator) runnable;
        when(iterator.next()).thenReturn("a", 2);
        doThrow(new IllegalStateException()).when(runnable).run();

        assertThat(iterator.next(), is(Matchers.<Object>equalTo("a")));

        try {
            runnable.run();
            fail();
        }
        catch (IllegalStateException e) {
        }
    }

关于java - 是否可以使用 EasyMock 创建一个实现多个接口(interface)的模拟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1170708/

相关文章:

java - 是否可以有一个带有中间生产者的 Java Stream?

java - FileUpload (Apache Commons) 和 Java POI IOException : Unable to read entire header

java - Spring 启动1.5.4 : exclude configuration class in unit test

c++ - 无法识别子进程中的 Googletest Explicit FAIL()

mocking - mock 时如何跳出循环

python - 如何模拟 ManyToMany 字段?

java - Guava 加载多个键并获取多个项目

java - Character.getNumericValue 的反面是什么

visual-studio - 每当测试断言时 VSTest 磁盘驱动器错误

c# - 单元测试中的部分模拟/伪造