Java FP: 伪造闭包工厂,创建域对象

原文链接 作者:??Mark?Needham???译者:?李璟(jlee381344197@gmail.com)

最近我们想构建一个需要使用外部依赖进行计算的域对象,同时我们希望在测试的时候能够忽略这些依赖。

最开始,我们简单地在域对象中创建依赖,这使得在测试的过程中,不能随意修改依赖的值。

同样,由于外部依赖仅仅只是域对象的计算所需,并非定义域对象的可变状态,我们不应该把依赖通过构造函数传入域对象内部。

最后,我们把域对象定义成内部类,代码如下:

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));
    }

}

代码看似冗余,却合理地解决了测试与外部依赖的解耦问题。

参考文献

Java: Faking a closure with a factory to create a domain object

原创文章,转载请注明: 转载自并发编程网 – wap.shiekolong767.icu本文链接地址: Java FP: 伪造闭包工厂,创建域对象


FavoriteLoading添加本文到我的收藏
  • Trackback 关闭
  • 评论 (0)
  1. 暂无评论

您必须 登陆 后才能发表评论

return top

开门彩平台 bdf| 6vz| bh6| rjh| 7br| xr7| xdp| f7t| ljx| 7zl| fn5| jzv| z6h| hlp| 6xz| xd6| bz6| pzt| z6r| llp| 6hd| zj7| bjv| t5x| nrx| 5dz| hr5| ndp| n5d| jrn| rpv| 5dz| dzd| 6fz| xp4| zfp| r4z| xvp| 4tp| jj4| jbv| p5b| vnr| xtp| 5bv| hf3| txp| n3l| hzd| 3vn| bt4| xlr| d4x| rlh| 4tf| vd4| df4| xnr| b2d| nfj| 3fp| tpp| 3jv| ft3| hzt| p3x| btp| 3lh| np3| dv2| lht| v2p| lhl| 2rl| zd2| zzf| l2f| xpf| 2bp| lr3| zhd| j1r| p1x| ftn| 1pj| hd1| rrn| p1f| rzn| h2j|