Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否应该测试来自私有消息的传出命令-ruby_Ruby_Tdd - Fatal编程技术网

我是否应该测试来自私有消息的传出命令-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的构造函数。所以接收方成为发送方类的公共接口的一部分。