2014-03-06 47 views
0

我正在爲封裝C++庫的C API編寫一個Ruby API。 C API捕獲C++庫拋出的C++異常。注意在rspec中的錯誤消息,這不是一個例外

理想情況下,我可以進入並修改C庫以便引發Ruby異常,但由於我使用的是FFI,因此這不是一個真正的選擇。

C API將帶有「捕獲異常:」的異常字符串前置,打印到STDERR,然後繼續,基本上忽略該錯誤。我想在rspec中觀察這些類型的字符串。

這可能嗎?這確實是在rspec之前完成的,但我不太清楚如何搜索這種功能。

回答

0

您可以嘗試捻熄STDERRhere建議:

before do 
    @orig_stderr = $stderr 
    $stderr = StringIO.new 
    end 

    it "it writes to err" do 
    subject.do_that_thing 
    $stderr.rewind 
    $stderr.string.chomp.should =~ "Caught exception: " 
    end 

    after do 
    $stderr = @orig_stderr 
    end 
+0

這似乎並沒有對我的工作。難道是因爲警告來自C國而不是Ruby? –

+0

是的,它可能是...... :-( –

相關問題