从构造函数参数模拟对象
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 ...
}
}
我有以下 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 ...
}
}