莞城网站仿做,网站建设可以修改吗,宜昌十堰网站建设哪家好,深圳房价最近#xff0c;我们想要创建一个域对象#xff0c;该对象需要具有外部依赖关系才能进行计算#xff0c;并且希望能够在测试中解决该依赖关系。 最初#xff0c;我们只是在领域类中新建依赖项#xff0c;但这使得无法在测试中控制其值。 同样#xff0c;我们似乎不应该将… 最近我们想要创建一个域对象该对象需要具有外部依赖关系才能进行计算并且希望能够在测试中解决该依赖关系。 最初我们只是在领域类中新建依赖项但这使得无法在测试中控制其值。 同样我们似乎不应该将这种依赖关系传递到域对象的构造函数中因为它不是定义对象的状态而只是定义对象使用的状态。 我们最终得到了类似于以下代码的内容其中将域对象作为内部类 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 {Testpublic 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));}
} 解决该问题的方法有点冗长但似乎工作得很好。 参考 Java伪造工厂的闭包以从我们的JCG合作伙伴 创建域对象 Mark Needham博客上的 Markh Needham。 翻译自: https://www.javacodegeeks.com/2012/03/java-faking-closure-with-factory-to.html