2012-08-29 2 views
0

내 사양에 Net :: SFTP :: StatusException 오류를 강제로 적용하고 내 코드가이를 트랩하도록 확인하려고합니다.RSpec : 강제로 Net :: SFTP :: StatusException 및 구조 유효성을 검사

코드 :

def process_SFTP(username, password, csvfile) 
    begin 
     mySftpWrapper.new 
     mySftpWrapper.process_CSV_file(csvfile) 
    rescue RuntimeError => other_problem 
     logger.info(other_problem.message) 
    rescue Net::SFTP::StatusException => sftp_problem 
     logger.info(sftp_problem.message) 
    end 
end 

RSpec에가 :

let(:wrapper) { mySftpWrapper.new } 
before(:all) do 
    @wrapper_mock = double('mySftpWrapper') 
    mySftpWrapper.stub(:new).and_return(@wrapper_mock) 
    @logger_mock = double('ActiveSupport::BufferedLogger') 
end 

it "should trap a Net::SFTP::StatusException" do 
    sftp_response = Object.new 
     def sftp_response.code; code = 2 end 
     def sftp_response.message; message = "no such file" end 
     # Force exception here 
     @wrapper_mock.stub(:process_SFTP).with("username", "password", "nonexistentfile").and_raise(Net::SFTP::StatusException.new(sftp_response)) 
     # Verify that logger.info received the forced error 
     @logger_mock.stub(:info).should_receive(/no such file/) 
     wrapper.process_SFTP("date", "username", "password", "nonexistentfile") 
end 

그러나, 나는 인터넷을 생성하는 데 사용하는 문 :: SFTP :: StatusException 올바른 예외 ("Net::SFTP::StatusException")를 포기하지 않습니다. 대신에 throw합니다 #<Net::SFTP::StatusException: Net::SFTP::StatusException>

올바른 StatusException을 강제로 적용하려면 어떻게합니까?

모든 아이디어를 높이 평가합니다!

답변

0

밝혀 졌 듯이 spec 예제는 정확히 올바른 Exception을 던지고 있습니다. 문제는 인터넷이 :: SFTP :: StatusException는 RuntimeError에에서 서브 클래스된다

그물 SFTP를-2.0.5/lib 디렉토리/그물/SFTP/errors.rb :

module Net; module SFTP 

    # The base exception class for the SFTP system. 
    class Exception < RuntimeError; end 

    # A exception class for reporting a non-success result of an operation. 
    class StatusException < Net::SFTP::Exception 

및 인터넷 : : SFTP :: StatusException이 던져지고 있었지만 StatusException 절에 도달하기 전에 RuntimeError 절에 의해 갇히게되었습니다. 정확히 사양이 무엇입니까!