簡體   English   中英

如何在 ruby 中測試簡單的救援塊

[英]How to test a simple rescue block in ruby

我在 ruby 中有一個自定義事實,如下所示:

Facter.add(:some_random_fact) do
  setcode do
    output = execute_some_method
    if !output.nil? then
      begin
        pruned_output = output.split("\n")
        result = true
      rescue
        result = false
      end
    else
      result = false
    end
  end
end

如何使用 rspec 為救援塊編寫單元測試以引發異常?

編輯:如果以下測試是正確的測試方法,請告訴我

it "return fact as false when begin block raises exception" do
    output = double(:output)
    allow(output).to receive(:split).with(true).and_raise(RuntimeError.new("error occured"))
    expect(Facter.fact(:some_random_fact).vallue).to eq(false)
end

您在此處顯示的代碼很奇怪,我覺得我們缺少上下文,但通常您可以刪除一個引發錯誤的方法,如下所示:

expect(output).to receive(:split).with("\n").and_raise(RuntimeError.new("some error"))

但這是 go 關於事物的一種丑陋方式。 如果根據output的類型有條件地引發錯誤,那么最好找到一種方法將該變量設置為產生錯誤的值。 如何做到這一點,我不能在沒有看到你的代碼測試的情況下告訴你。

例如,假設您將所有這些代碼包裝在def add_fact(output)中 - 然后從您的測試中,您可以故意為output傳遞一個導致錯誤的值,並且您不再需要存根拆分(這是一件奇怪的事情)。 這種模式被稱為“依賴注入”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM