0

我需要测试以下行:

result = handle(streamOfMessages)

Wheremessagescontext是填充良好的哈希值。我可以这样写it

messages1 = [ {"type"=>"someType1","value"=>"someBigHash1"}, {"type"=>"someType2","value"=>"someBigHash2"}, {"type"=>"someType1","value"=>"someBigHash3"} ]
result1 = handle(messages1)
result1.should == [someValue1, someOtherValue1]

messages2 = [ {"type"=>"someType1","value"=>"someBigHash1"}, {"type"=>"someType2","value"=>"someBigHash2"}, {"type"=>"someType1","value"=>"someBigHash3"} ]
result2 = handle(messages1)
result2.should == [someValue2, someOtherValue2]

// same about messages3, result3 etc

messages[i]我可以制作一个数组数组并在循环中引用。然而,在我看来,这一切都是一种非常古老的方法,因此我正在寻找一种更具启发性(或者我什至应该说是基于DSL)的编程风格。如果有更好的语法来构造消息流和迭代多个流同时期望不同的结果,那就太好了。

4

2 回答 2

0

您可以为每个输入动态生成单独的测试用例:

[ {"type"=>"someType1","value"=>"someBigHash1"}, {"type"=>"someType2","value"=>"someBigHash2"}, {"type"=>"someType1","value"=>"someBigHash3"} ].each do |h|
  it "should handle #{h[:type]} to return #{h[:value]}" do
     result1 = handle(h)
     result1.should == [value1, value2]
  end
end

value1 和 value2 没有在这里设置,但我希望你明白这一点 - 你也可以将它们插入到你的哈希数组中并与它们进行比较。

于 2012-10-30T09:56:06.170 回答
0

我不会以任何重要的方式重写规范。在我看来,单元测试不应该包含“聪明”的代码,它们不应该被重构和干枯广告荒谬。您唯一想从他们那里得到的就是查看一段代码是否为给定的输入产生了正确的输出。而且您的代码已经实现了...

于 2012-10-30T10:59:53.750 回答