public class FooFactory {
private final RandomService randomService;
public FooFactory(RandomService randomService) {
this.randomService = randomService;
}
public Foo createFoo(String bar, int baz) {
return new Foo(bar, baz);
}
class Foo {
private String bar;
private int baz;
public Foo(String bar, int baz) {
this.bar = bar;
this.baz = baz;
}
public int awesomeStuff() {
int random = randomService.random(bar, baz);
return random * 3;
}
}
}
测试这段代码的测试用例如下:
public class FooFactoryTest {
@Test
public void createsAFoo() {
RandomService randomService = mock(RandomService.class);
when(randomService.random("bar", 12)).thenReturn(13);
FooFactory.Foo foo = new FooFactory(randomService).createFoo("bar", 12);
assertThat(foo.awesomeStuff(), equalTo(39));
}
}
代码看似冗余,却合理地解决了测试与外部依赖的解耦问题。
参考文献