我是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
答案 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环境变量,并在底部取消设置。
看起来有点笨重,所以我有兴趣看看是否有其他人有任何其他想法。