0

Ruby 中的实用面向对象设计:敏捷入门中,作者写道,“[一个对象]负责测试它自己的接口,它通过对这些 [传入] 消息返回的结果做出断言来做到这一点。......这些消息需要测试,因为其他应用程序对象依赖于它们的签名和它们返回的结果。”

她解释说,“测试传入消息的第一个要求是证明它在每种可能的情况下都返回正确的值”,将此作为假设类diameter方法的单元测试示例:Wheel

def test_calculates_diameter
  wheel = Wheel.new(26, 1.5)
  assert_in_delta(29, wheel.diameter, 0.01)
end

我的问题是,不返回值的传入消息怎么办?我有一个对象,它的公共接口只有两个方法,它们不返回值,而只是改变接收对象的状态。我还需要测试那个对象吗?如果是的话,怎么做?

4

1 回答 1

0

在输入问题时,我想我已经意识到了答案:使用作者的命名法,我应该测试为响应传入消息而发送的传出“命令”消息

对于某些上下文,作者后来写道,“许多传出消息确实有副作用(……观察者采取行动),您的应用程序依赖于这些消息。这些消息是命令,发送对象的响应性可以证明它们是正确发送。”

在我的例子中,我的对象是一个容器,当它的状态改变时它会向它的孩子发送消息,所以这个对象的测试应该确保这些消息被发送给它的孩子。

于 2013-07-01T19:08:20.083 回答