【问题标题】:Easymock isA vs anyObjectEasymock isA vs anyObject
【发布时间】:2015-02-15 09:15:09
【问题描述】:

有什么区别

EasyMock.isA(String.class) 

EasyMock.anyObject(String.class)

(或提供的任何其他类)

在什么情况下你会使用其中一种?

【问题讨论】:

    标签: easymock


    【解决方案1】:

    不同之处在于检查 Null。 isA 在 null 时返回 false,但 anyObject 在 null 时也返回 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 应该会失败。

    【讨论】:

    • 我认为你的 runTest 方法在代码中倒退了,但我明白你在说什么!谢谢!
    【解决方案2】:

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

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

    对于 anyObject() 它说

    匹配任何值。

    您可以在此处查看文档

    没有提到这两种方法之间的具体区别。

    【讨论】:

    • 我看过了,但我还是不清楚。这是否意味着 anyObject() 只匹配该类的一个实例,而 isA() 将匹配该类及其任何子类的一个实例?
    • 那么就没有区别了吗?
    • 其实按照方法命名约定isA()应该是一个返回布尔值的方法,但是只有天知道它为什么返回一个实例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2015-11-24
    • 2015-05-07
    相关资源
    最近更新 更多