用于类参数的easymock方法匹配器

时间:2014-07-10 17:21:11

标签: java junit easymock

我有一个带签名的方法如下:

    public <T extends S> T foo(final Class<T> clazz){
       .....
       .....
    }

如何在easymock中模拟此方法?

我尝试在我的测试类中跟踪两行,但仍未返回预期的对象,因此我得到NullPointerException。

    Capture<Class<MyClass>> classCapture = new Capture<Class<MyClass>>();
            expect(someObject.foo(EasyMock.capture(classCapture))).andReturn(testObject);

testObject在测试类中初始化,我希望在

时返回
    foo() 

被调用。我在哪里做错了?

1 个答案:

答案 0 :(得分:1)

我不确定你为什么要在这个实例中捕获变量,但问题是你输入命令的方式意味着你正在寻找一个没有任何参数的方法foo()

您需要使用and()来链接捕获和方法调用的参数匹配器要求:

expect(someObject.foo(EasyMock.and(
                            EasyMock.capture(classCapture),
                            anyObject()))
                      )
            .andReturn(testObject);

然后在重播模式下调用模拟后,您可以使用capture.getValue()

返回捕获的参数
    replay(someObject);

    assertSame(testObject, someObject.foo(MyClass.class));

    assertEquals(MyClass.class, classCapture.getValue());