【问题标题】:TDD: Constructor Injection and Mutator TestingTDD:构造函数注入和变异测试
【发布时间】:2014-01-23 16:39:03
【问题描述】:

是时候回答一些我似乎无法找到答案的看似简单的问题了。

我正在使用 TDD (PHP) 开发一个库。据我了解,在使用 TDD 时,您不应该在没有首先编写失败测试来保证它的情况下编写任何生产代码

  1. 我有一个 mutator 方法,它将数据附加到具有私有可见性的数组中。我应该如何测试?我应该只测试各种访问器吗?访问器的测试是否应该覆盖 mutator 方法?

  2. 是否可以通过测试来测试访问器和修改器,还是应该将它们分开测试?

  3. 我的库需要一个依赖项,我将通过构造函数注入它。哪些测试代码可能会提示我编写构造函数代码?

很抱歉提出如此幼稚的问题。我一直在研究 TDD,并认为我已经弄清楚了,但是当我尝试使用它时,所有这些小问题都会浮现在脑海中。显然,我想确保尽我所知有效地实施它。

也许我太严格了?也许使用模拟隐式测试注入并检查使用注入类的方法的期望?

我知道这些问题可能是主观的,答案可能基于人们的意见,但我对此没有意见。我只想以一种有意义且有效的方式开始。

非常感谢。

【问题讨论】:

  • 只是我对 3 的回答:“也许使用模拟隐式测试注入并检查使用注入类的方法的期望?”是的,我就是这样做的。
  • 就我个人而言,我将 setter+getter 一起测试,因为没有其他方法(我不会尝试访问私有属性,如果实现更改,该测试会崩溃)。但我很想知道是否存在替代/更好的方法。

标签: php unit-testing dependency-injection tdd


【解决方案1】:

我会一起测试 setter 和 getter 方法,因为这是迄今为止最简单的方法,无需更改数组的可见性,而您不应该这样做。这些测试将隐式测试您注入的类。

一般来说,尝试从另一个尝试使用您的测试类的用户的角度编写您的单元测试。你需要思考,这个类应该做什么或者它的契约是什么(即这个类包含一个用户可以添加和删除的对象数组),然后编写测试以确保它满足该契约。之后,编写足够的代码以使测试通过。

【讨论】:

  • 优秀。感谢您的澄清。 :)
猜你喜欢
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 2015-05-12
  • 2018-08-06
相关资源
最近更新 更多