Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确保在JUnit测试中调用了所有getter方法_Java_Testing_Reflection_Junit - Fatal编程技术网

Java 确保在JUnit测试中调用了所有getter方法

Java 确保在JUnit测试中调用了所有getter方法,java,testing,reflection,junit,Java,Testing,Reflection,Junit,我有一个使用XStream的类,它被用作我的应用程序的传输格式。我正在为其他类编写测试,这些类将此传输格式映射到不同的消息传递标准。我希望确保在测试中调用类上的所有getter,以确保如果添加了新字段,我的测试会正确地检查它 XStream类的大致轮廓 @XStreamAlias("thing") public class Thing implements Serializable { private int id; private int someField; public int g

我有一个使用XStream的类,它被用作我的应用程序的传输格式。我正在为其他类编写测试,这些类将此传输格式映射到不同的消息传递标准。我希望确保在测试中调用类上的所有getter,以确保如果添加了新字段,我的测试会正确地检查它

XStream类的大致轮廓

@XStreamAlias("thing")
public class Thing implements Serializable {
 private int id;
 private int someField;

 public int getId(){ ... }
 public int someField() { ... }
}
现在,如果我将该类更新为:

@XStreamAlias("thing")
public class Thing implements Serializable {
 private int id;
 private int someField;
 private String newField;

 public int getId(){ ... }
 public int getSomeField() { ... }
 public String getNewField(){ ... }
}
我希望我的测试失败,因为旧测试没有调用
getNewField()

我们的目标是确保如果添加了新的getter,那么我们就有办法确保测试能够检查它们

理想情况下,这将完全包含在测试中,并且不需要修改底层对象类


有什么想法吗?谢谢你的关注

可能是您需要的代码覆盖工具。如果您有100%的代码覆盖率,则调用了所有get方法。如果您正在使用eclipse,请检查EclEmma插件。

您可以使用。我发现它非常有用,而且很容易设置。也很容易与哈德逊集成。他们也有一个eclipse。

如果你想自动测试你的测试,JUnit不是一个好的选择。您希望如何确保您的“特殊测试”在所有其他测试之后始终作为最后一个被调用?(我不认为这是不可能的,但它反对JUnit模型/哲学,即测试用例应该相互独立)

如果您决定这样做,其中一个可能性就是生成Cobertura代码覆盖率报告并对其进行解析,以确定测试期间是否覆盖了所有getter。可能还有一种方法可以通过一些API与Cobertura交互,而不是依赖于输出报告文件

算法示例:

  • 运行常规测试套件
  • 科贝图拉酒店
  • 运行特殊测试用例

  • 听起来你在谈论一个元测试——一个测试的测试。我觉得这没什么意义。测试是规范。所以测试用例的开发人员在添加新字段时应该更新测试。也就是说,这里有一种调用Javabean的所有getter方法的方法

    public class GhettoBeanTest {
        private static class Subclass extends SomeObject {
            @Override public String toString() {
                return org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(this);
            }
        }
    
        @Test public void ensureToStringMethodExecutes() {
            String value = new Subclass().toString();
    
            // teset passed - all getter methods were executed by the toString method above
        }
    }
    
    考虑JavaBeanTester:


    我们经常使用它。我们喜欢它。

    我写过这样的东西,你可以找到它。
    它使对象成为代理,因此所有调用都被拦截,以后可以进行检查。

    Easy。不要测试获取方法。它们对测试来说“太简单了”。废话。我需要StackOverflow的“愚蠢头盔”徽章。我已经安装了Emma,并且正在其他项目中使用它。谢谢你的提醒哈。