可能重复:
当你使用Java的@覆盖批注,为什么?
从的javadoc @Override批注:
表示一个方法声明打算重写超类中的方法声明。 如果一个方法被标注与此注释类型,但不覆盖超类方法中,需要的编译器来生成一个错误消息。
我倾向于使用@Override批注在测试中,当我想测试的类型的具体方法和替换一些我的测试对象调用的其他方法的行为。 我的一个同事是坚定地认为,这不是一个有效的使用,但不知道为什么的。 任何人都可以说明为什么要避免它?
我添加了下面的例子来说明我的使用。
被测试者富:
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()签名的变化,我会得到我的测试编译错误,而不是一个混乱的执行失败。