【发布时间】:2016-01-21 01:05:12
【问题描述】:
这是有效的,但对我来说感觉很草率。我想知道这是否是代码异味,或者是否有更好的方法来实现此结果。基本问题是如何在 ruby 中存根任意对象。
我正在测试一个边缘案例——解析辅助方法的最终值正确地格式化了谷歌分析查询的结果(因此是奇怪的断言语句)传入的数据是一个谷歌分析对象,其数据在内部——本质上我们必须打电话给result.data["rows"]。此处结构的全部目的是使我的方法的内部能够发送该#data 消息。测试适当地通过/失败,但就像我说的那样,我想知道这是否是最好的方法,例如在发送数据进行解析之前将我的数据从 GA 结果对象中取出。
我的测试方法-实际上它调用parse_monthly_chart_data(@ga_result)
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
编辑:我已经通过用 mocha 的实现替换存根解决了这个问题的一部分。我仍然想知道这是否是代码异味。
【问题讨论】:
标签: ruby minitest stub stubbing