gpt4 book ai didi

ruby - 我可以在 Ruby 中 stub "raise"吗?

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

我有一个名为 RemoteError 的类,上面有一个 self.fatal 方法。这个方法的工作基本上是捕获异常,将异常的详细信息发送到服务器,然后传播异常以终止程序。

class RemoteError
def initialize(label, error)
@label = label
@error = error
end

def self.fatal(label, error)
object = new(label, error)
object.send
raise error
end

def send
# send the error to the server
end
end

我正在尝试为 RemoteError.fatal 方法编写测试。这很困难,因为在方法中调用了 raise。每次我运行测试时,raise 显然会引发异常,我无法测试是否调用了 send

  describe "fatal" do
it "should send a remote error" do
error = stub
RemoteError.stub(:new) { error }
error.should_receive(:send)

RemoteError.fatal(stub, stub)
end
end

对于这个特定的测试,有什么方法可以 stub 或以某种方式规避 raise 吗?

最佳答案

您可以将引发错误的方法包装在 lambda 中...

it "should send a remote error" do
...

lambda { RemoteError.fatal(stub, stub) }.should raise_error(error)
end

这实质上允许调用该方法,您可以从中获取返回值或引发的错误,然后使用 .should raise_error(error) 断言。这也使得如果该调用没有错误,测试将正常失败。

换句话说,您不需要,也不想 stub raise。只需将其包装在 lambda 中,您的代码就会继续执行,您应该能够确保您的消息已发送,并且您的测试不会退出/崩溃。

关于ruby - 我可以在 Ruby 中 stub "raise"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9177875/

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