Java 确保在JUnit测试中调用了所有getter方法
我有一个使用XStream的类,它被用作我的应用程序的传输格式。我正在为其他类编写测试,这些类将此传输格式映射到不同的消息传递标准。我希望确保在测试中调用类上的所有getter,以确保如果添加了新字段,我的测试会正确地检查它 XStream类的大致轮廓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
@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,并且正在其他项目中使用它。谢谢你的提醒哈。