【发布时间】:2015-02-15 09:15:09
【问题描述】:
有什么区别
EasyMock.isA(String.class)
和
EasyMock.anyObject(String.class)
(或提供的任何其他类)
在什么情况下你会使用其中一种?
【问题讨论】:
标签: easymock
有什么区别
EasyMock.isA(String.class)
和
EasyMock.anyObject(String.class)
(或提供的任何其他类)
在什么情况下你会使用其中一种?
【问题讨论】:
标签: easymock
不同之处在于检查 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 应该会失败。
【讨论】:
我对 Easymock 文档感到非常困惑,因为据说 API 文档中的 EasyMock.isA() 会返回一个调用它的类对象,但 Easymock 文档(for isA(Class clazz))说
如果实际值是给定类的实例,或者它是扩展或实现给定类的类的实例,则匹配。 Null 总是返回 false。可用于对象。
对于 anyObject() 它说
匹配任何值。
您可以在此处查看文档
没有提到这两种方法之间的具体区别。
【讨论】: