2010-05-24 4 views
1

저는 루비를 처음 사용하기 때문에 이것이 간단하거나 약간의 용어가 잘못되면 용서해줍니다.컨텍스트를 기반으로하는 단위 테스트에서 루비 로그 수준을 어떻게 변경할 수 있습니까?

단위 테스트 (실제로는 다른 프로젝트의 통합 테스트이지만 루비 테스트/유닛을 사용합니다)가 있으며 로그 객체의 인스턴스 변수를 설정하는 모듈에서 모두 포함됩니다. 개별 테스트를 실행할 때 log.level을 디버그하고 싶습니다.하지만 suite를 실행하면 log.level이 오류가되고 싶습니다. 내가 취하는 접근법으로 이것을 수행 할 수 있습니까? 아니면 코드를 재구성해야합니까?

여기 내가 지금까지 가지고있는 것의 작은 예가 있습니다.

로깅 모듈 :

#!/usr/bin/env ruby 

require 'logger' 

module MyLog 

    def setup 
    @log = Logger.new(STDOUT) 
    @log.level = Logger::DEBUG 
    end 
end 

시험 : 그 디렉토리에있는 모든 테스트의 구성

#!/usr/bin/env ruby 

require 'test/unit' 
require 'mylog' 

class Test1 < Test::Unit::TestCase 

    include MyLog 

    def test_something 
    @log.info("About to test something") 
    # Test goes here 
    @log.info("Done testing something") 
    end 
end 

테스트 스위트 :

#!/usr/bin/env ruby 

Dir.foreach(".") do |path| 
    if /it-.*\.rb/.match(File.basename(path)) 
    require path 
    end 
end 
+0

필자는 각 필수 테스트에 대한 테스트 스위트에서 로그 수준을 설정할 수 있어야하는 것처럼 보이지만 스위트 정의에 대해 더 명시해야한다고 생각합니다. – Stuart

답변

1

당신이 말한대로 당신은 스위트 룸에 뭔가를 설정해야합니다. 다음과 같은 설정 방법으로 사용할 수 있습니다. Suite에서 MyLog.setInSuite를 호출하면 설정시 INFO 레벨로 설정됩니다.

module MyLog 
    @@use_info = false 

    def MyLog.setInSuite() 
    @@use_info = true 
    end 

    def setup 
    @log = Logger.new(STDOUT) 
    if (@@use_info) 
     @log.level = Logger::INFO 
    else 
     @log.level = Logger::DEBUG 
    end 
    end 
end 
0

흠. 나는 그것을 할 수있는 방법은 환경 변수를 테스트하는 로깅 모듈을 변경하는 것, TEST_SUITE 말하고 그것이 설정되어 있다면 정보 로깅 수준을 설정하고 그렇지 않은 경우 디버깅하는 것입니다.

그런 다음 테스트 스위트를 업데이트하여 TEST_SUITE 환경 변수를 맨 위에 설정하고 맨 아래에서 설정을 해제하십시오.

조금 어색해 보입니다. 그래서 다른 누군가가 다른 아이디어를 가지고 있는지 알고 싶습니다.

관련 문제