Easymock isA vs anyObject

时间:2014-12-16 22:29:11

标签: easymock

之间有什么区别
EasyMock.isA(String.class) 

EasyMock.anyObject(String.class)

(或任何其他提供的课程)

你会在什么情况下使用一个而不是另一个?

2 个答案:

答案 0 :(得分:22)

区别在于检查Null。 isA在null时返回false,但anyObject也返回true。

import static org.easymock.EasyMock.*;
import org.easymock.EasyMock;
import org.testng.annotations.Test;


public class Tests {


    private IInterface createMock(boolean useIsA) {
        IInterface testInstance = createStrictMock(IInterface.class);
        testInstance.testMethod(
                useIsA ? isA(String.class) : anyObject(String.class)
        );
        expectLastCall();
        replay(testInstance);
        return testInstance;
    }
    private void runTest(boolean isACall, boolean isNull) throws Exception {
        IInterface testInstance = createMock(isACall);
        testInstance.testMethod(isNull ? null : "");
        verify(testInstance);
    }
    @Test
    public void testIsAWithString() throws Exception {
        runTest(true, false);
    }
    @Test
    public void testIsAWithNull() throws Exception {
        runTest(true, true);
    }
    @Test
    public void testAnyObjectWithString() throws Exception {
        runTest(false, true);
    }
    @Test
    public void testAnyObjectWithNull() throws Exception {
        runTest(false, false);
    }

    interface IInterface {
        void testMethod(String parameter);
    }
}

在示例中,testIsAWithNull应该失败。

答案 1 :(得分:3)

我对Easymock文档感到困惑,因为API文档中的EasyMock.isA()据说会返回一个调用它的类对象,但是Easymock文档(对于isA(Class clazz))表示

  

匹配,如果实际值是给定类的实例,或者它是在扩展或实现给定类的类的实例中。 Null总是返回false。可用于对象。

对于anyObject(),它说

  

匹配任何值。

您可以在此处查看文档

这两种方法之间没有特别的区别。