метод соответствия easymock для аргумента класса

1

У меня есть метод с сигнатурой следующим образом:

    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() 

называется. Где я поступаю неправильно?

  • 0
    Вы должны издеваться над этим методом? Он принимает только Class , и это действительно легко вставить в метод.
  • 0
    Есть ли какая-то причина, по которой вы не можете просто сопоставить anyObject(Class.class) ?
Теги:
junit
easymock

1 ответ

1

Я не уверен, почему вы хотите захватить переменную в этом экземпляре, но ваша проблема заключается в том, как вы набрали вашу команду, означает, что вы ищете метод 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());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню