如何使用junit从同一个类中模拟方法

时间:2016-11-01 12:33:48

标签: java unit-testing junit mocking

我正在使用JUnit,我的情况如下:

class A{
    public int[] method1(){
       ...
       int res = method2();
       ...
       return intArray;
    }

    public int method2(){
      ....
      return intA;
    }
}

我正在尝试关注模拟method2()

new MockUp<MockClass>() {
            int[] methodToMock() {
                int[] mockedResult = {1, 2, 4, 6};
                return mockedResult;
            }
        };

当我将它用于另一个类时,上面的代码工作正常。 但是,如果我想从同一个类中模拟方法它不起作用。

请指导我在JUnit中找到模拟方法,从同一类中查找模拟方法。

感谢。

1 个答案:

答案 0 :(得分:2)

public method调用同一个类的另一个public method并不是软件开发中的问题,但它会在您的类中创建一个内部耦合,并且可能是该类中过多责任的标志。 这不一定是真的,但可以提出这个问题 证明:在这里,单元测试变得更加困难而不会被欺骗。

  

我无法将此方法移至任何其他类。而这种方法也是   在其他地方使用了一些,所以我不能一次俱乐部。

有了这些限制,我建议你保留这两种公共方法,并引入一个新的类,它会影响这两种方法的共同行为。
这两个公共方法现在可以依赖公共类来进行处理。

class A{

  private CommonProcess commonProcess;

  public int[] method1(){
   ...
   int res = commonProcess.method(...);
   ...
   return intArray;
  }

  public int method2(){
   ....
   commonProcess.method(...);
   ...
   return intA;
  }
}

现在,要模拟method2method1中的外部依赖项,只需模拟对commonProcess.method()的调用。