为了单元测试,我觉得程序中应该大量采用“支持链式调用”的setter

所谓链式的setter 就是 

   bean.setProp1("1").setProp2("2")…setPropN("N")

这样的好处就是:一行代码就可以设置完尽量多的属性值。这在单元测试里特别有用。

举例来说,当你要设置一个Bean作为测试数据,如果不用链式,则

    Bean bean = new Bean();
    bean.setProp1("1");
    bean.setProp2("2");
    bean.setProp3("3");
    assertEquals("XXX", bean.getXXX()); 

   一共要写五行代码。

    1. 由于普通的Setter不支持链式调用,因此3个属性要写3行set语句,每条语句里都要写一个"bean"字,即12个字母;

    2. 另外,构造方法 new Bean()本来是链式的,但由于受到无链式setter的拖累,以致于必须显式地声明一个 "bean" 变量。

而如果我们用链式风格的setter的话,一行即可。

   assertEquals("XXX",new Bean().setProp1().setProp2().setProp3().getXXX())); 

   看,多简洁! 可以采用匿名对象(new Bean()),并且不用换行。

当然了,这样做的好处主要是为了单元测试时准备数据。正式代码里可能不会一次性设置这么多属性,就算要设置这么多,这样写也会降低代码的可调试性。

你可能会问为什么不用一个 带有所有参数的构造方式? 我的看法是,

   1.参数较多的构造方法比较丑陋,调用时也容易把参数顺序搞错。比如 new Name("Diego", "Maradona") 中,哪个是 first name, 哪个是 last name?

   2.写带参构造方法比写无参和要累

   3.最重要的是,新增属性时会使带参的构造方法不得不重构。很烦。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.