У меня есть метод с сигнатурой следующим образом:
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()
называется. Где я поступаю неправильно?
Я не уверен, почему вы хотите захватить переменную в этом экземпляре, но ваша проблема заключается в том, как вы набрали вашу команду, означает, что вы ищете метод 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());
Class
, и это действительно легко вставить в метод.anyObject(Class.class)
?