Испытанный метод имеет следующий код:getAnnotation (класс <T>) всегда возвращает нуль, когда я использую EasyMock/PowerMock издеваться java.lang.reflect.Method
SuppressWarnings suppressWarnings = method.getAnnotation(SuppressWarnings.class);
В моей тестовой method.I издевались java.lang.reflect.Method:
Method method= PowerMock.createMock(Method.class);
SuppressWarnings sw = EasyMock.createMock(SuppressWarnings.class);
EasyMock.expect(method.getAnnotation(SuppressWarnings.class)).andReturn(sw);
В тестируемом методе
method.getAnnotation (SuppressWarnings.class); всегда возвращает null.
Я не знаю почему. Может ли кто-нибудь мне помочь?
//code:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Anonymous {
}
public class AnnotationClass {
public Anonymous fun(Method m){
Anonymous anonymous = m.getAnnotation(Anonymous.class);
return anonymous;
}
}
// test class:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Method.class)
public class AnnotationClassTest {
@Test
public void test() throws NoSuchMethodException, SecurityException {
AnnotationClass testClass = new AnnotationClass();
final Method mockMethod = PowerMock.createMock(Method.class);
final Anonymous mockAnot = EasyMock.createMock(Anonymous.class);
EasyMock.expect(mockMethod.getAnnotation(Anonymous.class)).andReturn(mockAnot);
PowerMock.replay(mockMethod);
final Anonymous act = testClass.fun(mockMethod);
Assert.assertEquals(mockAnot, act);
PowerMock.verify(mockMethod);
}
}
error:
java.lang.AssertionError: expected:<EasyMock for interface
com.unittest.easymock.start.Anonymous> but was:<null>
Когда я использовал свои индивидуальные аннотации, которые имеют @Retention (RetentionPolicy.RUNTIME), я получил тот же результат – niaomingjian
Вы правы, я обновил свой ответ. – rinde
Я попробовал еще раз, но все еще не смог. Я набрал источники на странице. Не могли бы вы помочь мне исправить эту проблему? Спасибо. – niaomingjian