<分区>
Possible Duplicate:
When do you use Java’s @Override annotation and why?
来自 @Override 注释的 javadoc:
Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.
我倾向于在测试中使用@Override 注释,当我想测试一个类型的特定方法并替换我的测试对象调用的其他一些方法的行为时。我的一位同事坚信这不是有效的用途,但不确定原因。任何人都可以建议为什么要避免它吗?
我在下面添加了一个示例来说明我的用法。
对于测试对象 Foo:
public class Foo {
/**
* params set elsewhere
*/
private Map<String, String> params;
public String doExecute(Map<String, String> params) {
// TODO Auto-generated method stub
return null;
}
public String execute() {
return doExecute(params);
}
}
我会这样定义一个测试:
public void testDoExecute() {
final Map<String, String> expectedParams = new HashMap<String, String>();
final String expectedResult= "expectedResult";
Foo foo = new Foo() {
@Override
public String doExecute(Map<String, String> params) {
assertEquals(expectedParams, params);
return expectedResult;
}
};
assertEquals(expectedResult, foo.execute());
}
然后,如果我的 doExecute() 签名发生变化,我将在测试中遇到编译错误,而不是令人困惑的执行失败。