gpt4 book ai didi

ruby + OOP + 测试 : How should I test incoming command messages?

转载 作者:数据小太阳 更新时间:2023-10-29 08:12:25 26 4
gpt4 key购买 nike

我刚刚重读了 Sandi Metz 的《Ruby 实用面向对象编程》,尤其是关于测试的章节。还有一个非常有用的演讲,我推荐 Rubyists 观看:http://www.youtube.com/watch?v=URSWYvyc42M

她说要测试这些案例:

  1. 传入查询消息:通过断言它们返回的内容来测试它们。

  2. 传入的命令消息:测试直接公开的副作用(我对此有疑问)

  3. 发送给自己的查询消息:不要测试它们

  4. 发送给自己的命令消息:不要测试它们

  5. 传出查询消息:不要测试它们

  6. 传出命令消息:测试它们是否已发送

对于#2,她提供了一个与此类似的示例:

#class
class Gear
attr_reader :cog
def set_cog(cog)
@cog = cog
end
end


# example spec
it "sets the value of @cog" do
gear = Gear.new
gear.set_cog(1)
expect(gear.cog).to eq(1)
end

所以这很简单,因为它只是设置实例变量的值,所以副作用很明显。但是,如果我的方法调用另一个命令消息怎么办?例如:

class Gear
attr_reader :cog, :foo, :bar
def set_cog(cog)
reset_other_attributes
@cog = cog
end

def reset_other_attributes
@foo = nil
@bar = nil
end

end

我应该如何测试它?我认为它应该像传出命令消息一样对待,您应该断言该消息已发送,并对 reset_other_attributes 方法进行单独测试。

it "calls the reset_other_attributes method" do
gear = Gear.new
gear.should_receive(:reset_other_attributes)
gear.set_cog(1)
end

这是正确的吗?

最佳答案

这个方法之所以难测,真正的原因是它违反了SRP原则。它设置的值超过了 cog 的值。

无论如何,在这种情况下我会测试预期的更改是否生效,测试调用“reset_other_attributes”方法似乎不合理。从这个片段来看,“reset_other_attributes”似乎甚至不应该成为公共(public) API 的一部分。

关于 ruby + OOP + 测试 : How should I test incoming command messages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21857789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com