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';s Struct以存根对象以进行小型测试_Ruby_Minitest_Stub_Stubbing - Fatal编程技术网

使用Ruby';s Struct以存根对象以进行小型测试

使用Ruby';s Struct以存根对象以进行小型测试,ruby,minitest,stub,stubbing,Ruby,Minitest,Stub,Stubbing,这很管用,但我觉得很邋遢。我想知道这是一种代码味道,还是有更好的方法来实现这个结果。基本问题是如何在ruby中存根一些任意对象 我正在测试一个边缘案例——解析助手方法的最终值正确格式化了google analytics查询的结果(因此是奇数assert语句)。传入的数据是一个google analytics对象,其数据在内部——本质上我们必须调用result.data[“rows”]。这里结构的全部目的是让我的方法的内部能够发送数据消息。测试通过了/失败了,但正如我所说的,我想知道这是否是最好的

这很管用,但我觉得很邋遢。我想知道这是一种代码味道,还是有更好的方法来实现这个结果。基本问题是如何在ruby中存根一些任意对象

我正在测试一个边缘案例——解析助手方法的最终值正确格式化了google analytics查询的结果(因此是奇数assert语句)。传入的数据是一个google analytics对象,其数据在内部——本质上我们必须调用
result.data[“rows”]
。这里结构的全部目的是让我的方法的内部能够发送数据消息。测试通过了/失败了,但正如我所说的,我想知道这是否是最好的方法,例如,在发送数据进行解析之前从GA结果对象中获取数据

我的测试方法-有效地调用
parse\u monthly\u chart\u数据(@ga\u result)


编辑:我用mocha的实现替换存根,部分解决了这个问题。我还在想这是不是代码的味道。

一点也不。我一直在用这种东西。您使用的是存根,使用
Struct
来实现这一点与使用测试框架的存根实现没有什么不同


谢谢。

谢谢。我想我在想,因为我必须创建整个假对象,这样它就有一个方法“data”,我可以存根。我确实喜欢mocha的实现,它的行为更像一个javascript对象——当我定义数据结构时,不需要区分
obj.data
obj.data['rows']
。谢谢
def test_parse_monthly_chart_data_with_good_values
  typical_data = {"rows" => [["0000", "194346"]...more arrays...]}
  typical_vals = typical_data["rows"].to_h.values.map(&:to_i)
  expected_result = typical_vals[-30..-1].inject(&:+)

  Struct.new("GaResult") {def data; end }
  @ga_result = Struct::GaResult.new
  @ga_result.stub :data, typical_data do
      assert_equal(ga.send(:parse_monthly_chart_data, @ga_result).flatten.last, expected_result)
  end

end