如何使用JUnit + Mockito模拟您尝试进行单元测试的服务中使用的类

时间:2014-09-23 17:59:06

标签: java junit mockito

我想为使用/依赖于另一个类的服务编写单元测试。我想做的是模仿依赖的行为(与该类的实例相对)。正在测试的服务方法在内部使用依赖类(即,依赖类的实例未传入方法调用)例如,我有一个我想要测试的服务方法:

import DependentClass;

public class Service {

    public void method() {
        DependentClass object = new DependentClass();
        object.someMethod();
    }
}

在我对Service method()的单元测试中,我想在DependentClass实例上模拟someMethod()而不是让它使用真实的。如何在单元测试中进行设置?

我见过的所有示例和教程都显示了传递给正在测试的方法的模拟对象实例,但我还没有看到任何显示如何模拟类而不是对象实例

这可能与Mockito(当然是)?

2 个答案:

答案 0 :(得分:4)

使用Powermockito框架和whenNew(...)方法很容易。您的测试示例如下:

   @Test
   public void testMethod() throws Exception {
      DependentClass dependentClass = PowerMockito.mock(DependentClass.class);
      PowerMockito.whenNew(DependentClass.class).withNoArguments().thenReturn(dependentClass);

      Service service = new Service();
      service.method();
   }

希望有所帮助

答案 1 :(得分:1)

这是设计不佳的问题。您始终可以从包私有构造函数中获取参数。 你的代码应该是这样的:

public class Service {

    DependentClass object;
    public Service(){
        this.object = new DependentClass();
    }

    Service(DependentClass object){ // use your mock implentation here. Note this is package private only.
     object = object;
    }

    public void method() {        
        object.someMethod();
    }
}