我是否应该测试来自私有消息的传出命令-ruby
假设我有两个合作者,我是否应该测试来自私有消息的传出命令-ruby,ruby,tdd,Ruby,Tdd,假设我有两个合作者,Sender和Receiver。我想对发送器进行单元测试Sender: class Sender attr_accessor :total def initialize(receiver) @receiver = receiver @total = 0 end def calculate total += 2 private_send end private def private_send receiver
Sender
和Receiver
。我想对发送器进行单元测试Sender
:
class Sender
attr_accessor :total
def initialize(receiver)
@receiver = receiver
@total = 0
end
def calculate
total += 2
private_send
end
private
def private_send
receiver.message(self)
end
end
class Receiver
...
def message(sender)
sender.total += 5
end
end
我知道我应该测试输入命令calculate
的副作用,例如
sender = Sender.new.calculate
expect(sender.total).to be 7
我知道我还应该测试是否调用了传出命令,但我不应该测试私有方法
在我的
发送方
单元测试中,我是否应该期望已使用消息
调用接收方
?或者它是calculate
的一个实现细节,因此已被涵盖?这主要是基于观点的。这是编写的calculate
的内部细节,其实现已经在测试中。如何达到最终结果,可以说是无关紧要的。事情是这样的:这也可以从集成测试中受益,因为功能跨越了边界,有一个论点是这里实际上缺少了一个处理实现细节的类。如果你有半个小时的时间,这个Sandi Metz谈话改变了我进行测试的方式,并具体回答是否测试传入/出站消息。如果不测试,这里有一个摘要,它不是完全私有的实现细节,因为您将receiver作为参数传递给Sender的构造函数。所以接收方成为发送方类的公共接口的一部分。