从构造函数参数模拟对象

Mocking objects from a constructor parameter

我有以下 class 布局:

public class Service {
  ServiceHelper helper;
  ...class methods...
}

public class ServiceHelper {
  Foo foo;
  Bar bar;
...class methods...
}

我正在为服务创建单元测试,但我想将 ServiceHelper 用作“实时”class,但 ServiceHelper 中的构造函数参数将被模拟。有没有办法通过 Mockito 实现这一点?

我认为你的例子不是一个好的做法。 Unit testing 越小越好。单元测试的目标是隔离程序的每个部分并证明各个部分是正确的。

总之,你还是可以试试这个方法。希望对你有帮助。

public class Service {

  private ServiceHelper helper;

  public Service(ServiceHelper helper) {
    this.helper = helper;
  }
}

public class ServiceHelper {

  private Foo foo;
  private Bar bar;

  // for unit testing only
  ServiceHelper(Foo foo, Bar bar) {
    this.foo = foo;
    this.bar = bar;
  }
}

测试 class :

public class ServiceTest {

  @Test
  public void your_test() {
    // arrange
    Foo mockedFoo = mock(Foo.class);
    Bar mockedBar = mock(Bar.class);
    ServiceHelper helper = new ServiceHelper(mockedFoo, mockedBar);  // the 'live' class
    Service service = new Service(helper);

    // act
    service.doSomething();

    // your assert ...
  }
}