我有一个应用程序,我想测试我是否正确
来自我的记录器的消息。
一个简短的示例(您可以在 log4r 和 logger 之间切换):
gem 'minitest'
require 'minitest/autorun'
require 'log4r'
#~ require 'logger'
class Testlog < MiniTest::Test
def setup
if defined? Log4r
@log = Log4r::Logger.new('log')
@log.outputters << Log4r::StdoutOutputter.new('stdout', :level => Log4r::INFO)
else
@log = Logger.new(STDOUT)
@log.level = Logger::INFO
end
end
def test_silent
assert_silent{ @log.debug("hello world") }
assert_output(nil,nil){ @log.debug("Hello World") }
end
def test_output
#~ refute_silent{ @log.INFO("Hello") }#-> NoMethodError: undefined method `refute_silent'
assert_output("INFO log: Hello World\n",''){ @log.info("Hello World") }
end
end
但我得到:
1) Failure:
Testlog#test_output [minitest_log4r.rb:27]:
In stdout.
Expected: "INFO log: Hello World\n"
Actual: ""
在我的输出屏幕上,我看到了这条消息。
我有类似的结果Log4r::StderrOutputter
and Log4r::Outputter.stdout
.
所以看起来它被发送到输出屏幕,但 STDOUT 或 STDERR 中的 minitest 没有捕获它。
在我开始编写 minitest-log4r-Gem 之前:
是否有可能在 minitest 中测试记录器输出?
如果不:
关于如何实现 minitest-log4r-Gem 有什么建议吗?
我能想到的例子:
- 为 minitest 定义新的输出器 (Log4r::MinitestOutputter)
- 模拟记录器。
- new assertions (add the new outputter as parameter?):
assert_message('INFO log: Hello World'){ @log.info("Hello World") }
-
assert_messages(:info => 1, :debug => 2){ @log.info("Hello World") }
来计算消息数。
assert_info_messages('Hello World'){ @log.info("Hello World") }
assert_debug_messages('Hello World'){ @log.info("Hello World") }