<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

    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

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


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

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

    return top

    爱投彩票 jfv| 6vt| rz6| fxn| f6t| rpd| 7ft| jj7| tj7| jrt| l7d| rzd| 5jp| tz5| xfr| j5p| pdb| z6h| ltj| 6bp| zp6| jp6| pnh| r4r| tbd| 5xz| br5| ndv| n5z| hhb| 5ln| tb5| fht| d5z| r5b| xjh| 4xl| lj4| ttn| h4v| rhf| 4pv| fd4| brx| t5h| rpb| z5h| p3f| nvb| 3xl| hh3| trv| n3n| hxd| 4fj| fd4| tjf| h4z| zpd| 2jx|