【问题标题】:Java testing if two void methods do the sameJava 测试两个 void 方法是否相同
【发布时间】:2017-12-26 14:43:20
【问题描述】:

我有一类成对的 void 方法:每个方法都有一个等效的方法,它应该以不同的方式执行相同的操作。 例如:

public void example1_1(){
    Integer i = new Integer(1);
}

public void example1_2(){
    Integer i = Integer.valueOf(11);
}

public void example2_1(){
    String result = "hello";
    for (int i = 0; i < 10; i++) {
        result += result;
    }
}

public void example2_2(){
    StringBuffer result = new StringBuffer("hello");
    for(int i = 0; i < 10; i++) {
        result += result;
    }
}

如何测试方法实际上是否成对执行相同的操作?

【问题讨论】:

  • 从理论的角度来看,如果两个程序计算相同的函数(通常)是不确定的。而您的示例函数除了浪费时间之外没有任何事情。没有返回结果或任何其他副作用。
  • 您无法跟踪某个方法执行的操作,因为您没有结果,它是否与另一种方法相似。您的两种方法的工作“结果”都没有存储在任何地方,因此您无法预测它们是否真的被执行了。编译器甚至可能将它们从字节码中丢弃。

标签: java testing void


【解决方案1】:

请注意,您没有任何返回值。这似乎是按计划进行的。

很难定义“执行相同操作的方法”,您是否只考虑结果 - 如果是,为什么要使用“void”而不只是检查返回值?你的意思是性能方面吗?复杂性明智?您可以要求许多级别的“相同”。

如果你想验证某个方法在迭代过程中被调用了 N 次,你可以使用 Mockito 验证方法 - 例如 - myMethod() 只被调用了一次。

verify(myClass, times(1)).myMethod();

我强烈建议您使用返回值来验证结果是否相同。

在更广泛的方法中,有人可能会争辩说,OOP 编程和特定接口方法的一部分是,如何方法执行它的功能并不重要,只要因为它是正确的,即只要该方法返回它应该返回的内容,内部实现就无关紧要了。 您可以使用单元测试检查正确性,就像我之前建议的那样,使用返回值和许多单元测试来验证各种输入的正确性

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多