В чем разница между
EasyMock.isA(String.class)
и
EasyMock.anyObject(String.class)
(или любой другой класс)
В каких ситуациях вы могли бы использовать один над другим?
В чем разница между
EasyMock.isA(String.class)
и
EasyMock.anyObject(String.class)
(или любой другой класс)
В каких ситуациях вы могли бы использовать один над другим?
Разница заключается в проверке Nulls. IsA возвращает false, когда null, но anyObject возвращает true для null.
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, так как EasyMock.isA() в документах API, как говорят, возвращает объект класса, на который он вызывается, но документация Easymock (для isA (Class clazz)) гласит, что
Соответствует, если фактическое значение является экземпляром данного класса, или если оно находится в экземпляре класса, который расширяет или реализует данный класс. Null всегда возвращает false. Доступно для объектов.
для anyObject() он говорит
Соответствует любому значению.
Вы можете посмотреть здесь Документацию
нет никакой конкретной разницы, упомянутой между этими двумя методами.