的測試方法具有以下代碼返回null java.lang.reflect.Method中:getAnnotation(<T>類)總是當我使用了EasyMock/PowerMock嘲笑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