java - 什么时候在java中使用@Override

标签 java unit-testing annotations

<分区>

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() 签名发生变化,我将在测试中遇到编译错误,而不是令人困惑的执行失败。

最佳答案

在那种测试中使用 Override 注释是完全有效的,但注释与测试根本没有特定关系;它也可以(并且应该)在整个生产代码中使用。

关于java - 什么时候在java中使用@Override,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1069152/

相关文章:

Java - 制作对象时,它们应该放在代码的什么位置

java - jruby注释方法没有被调用

c# - 注释验证不起作用

java - 如何随机生成字符串

java - 使用外部文件打包 Eclipse 程序

android - 通过Gradle执行本地单元测试时,为什么BuildConfig.DEBUG设置为false?

unit-testing - 如何模拟 http.Client Do 方法

unit-testing - 如何测试/重构测试调用 http.ListenAndServe 的函数

java - Jackson - 如何解析这个字段?

java - 在哪里最好定义java枚举?