代码之家  ›  专栏  ›  技术社区  ›  Freiheit

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

  •  2
  • Freiheit  · 技术社区  · 15 年前

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

    @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,我们就有某种方法来确保测试检查它们。

    有什么想法吗?感谢您的光临!

    6 回复  |  直到 15 年前
        1
  •  5
  •   Ha.    15 年前

    可能代码覆盖工具就是你所需要的。如果您有100%的代码覆盖率,那么所有get方法都已被调用。如果您使用的是eclipse,请检查EclEmma插件。

        2
  •  0
  •   kopper    15 年前

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

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

    1. 运行常规测试套件
    2. 运行Cobertura
        3
  •  0
  •   CoolBeans Jake    15 年前

    你可以用 Sonar plugin .

        4
  •  0
  •   les2    15 年前

    听起来你在谈论一个元测试-一个测试的测试。我觉得没什么意义。测试是规范,所以测试用例的开发人员应该在添加新字段时更新测试。也就是说,这里有一个简单的方法来调用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
        }
    }
    
        5
  •  0
  •   Andriy Sholokh    15 年前

    考虑java bean测试仪: http://sourceforge.net/projects/javabeantester/

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

        6
  •  0
  •   Meo    12 年前

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