如何根据上下文更改单元测试中的ruby日志级别

时间:2010-05-24 15:35:10

标签: ruby unit-testing

我是ruby的新手,请原谅我,如果这很简单,或者我的术语有些错误。

我有一堆单元测试(实际上它们是另一个项目的集成测试,但是它们使用ruby测试/单元)并且它们都包含来自为日志对象设置实例变量的模块。当我运行各个测试时,我想将log.level作为调试,但是当我运行套件时,我希望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

2 个答案:

答案 0 :(得分:1)

正如您所说,您需要在套件中设置一些东西。 可以在设置方法中使用以下内容。只需在您的套件中调用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

答案 1 :(得分:0)

嗯。我认为这样做的方法是更改​​日志记录模块以测试环境变量,例如TEST_SUITE并将日志记录级别设置为info(如果已设置),如果不是则调试。

然后更新您的测试套件以在顶部设置TEST_SUITE环境变量,并在底部取消设置。

看起来有点笨重,所以我有兴趣看看是否有其他人有任何其他想法。

相关问题