【问题标题】:How setter methods changes business requirements?setter 方法如何改变业务需求?
【发布时间】:2017-11-22 12:14:17
【问题描述】:

我正在处理 MockitoJUnit 集成。为了模拟对象,我创建了一些 setter 方法

@Mock
private SomeDaoImplClass someDaoImplClass

jdbcTamplate = Mockito.mock(NamedParameterJdbcTamplate.class)
someDaoImplClass.setNamedParameterJdbcTamplate(jdbcTamplate)

所以方法setNamedParameterJdbcTamplate(jdbcTamplate) 不存在,我在课堂上创建了这个setter method。 我得到了一些信息,您无法在业务类中创建这些 set 方法 b'coz 它的影响业务部门。

请有人建议我 set methods 如何影响 BU。

【问题讨论】:

  • 我并不感到惊讶。拼写警察也应该在你之后。这是一个 XY 问题。您需要在此处说明您正在尝试的内容,而不是询问如何绕过您的组织政策。

标签: java getter-setter business-logic


【解决方案1】:

任何业务对象都不应该分配自己的依赖项(你知道,因为Inversion of Control/Dependency Injection 的事情)

因此,如果您需要为您的对象提供 一些东西,您可以使用 setter 或通过构造函数来完成(首选后者)

确实,仅仅为了测试而添加方法是一种不好的做法。在这种情况下,情况可能会更糟:添加一个 setter 会禁止我们创建对象 immutable,这在使用多个线程时是可取的,并添加了一些安全限制(在构造函数完成后,没有任何属性没有初始化。

如果您需要添加这些方法记录它并将其可见性设置为默认,以便它仅在同一个包中可见(测试将在同一个包中)以尽量减少对生产的影响

如果你不能添加一个 setter 或修改构造函数......好吧,这并不是全部丢失。您可以使用reflection。通过使用它,即使没有访问器甚至最终属性,您也可以修改对象的任何属性。 请注意,这在运行时会变慢,并且需要一些异常处理

【讨论】:

  • 我喜欢将字段可见性设置为默认值并添加@VisibleForTesting
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多