我有一個應用程序,我想測試是否從我的記錄器得到正確的 消息。我得到如何使用MiniTest測試記錄儀信息?
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的和記錄器之間切換)。 我與Log4r::StderrOutputter
和Log4r::Outputter.stdout
有類似的結果。
所以它看起來被髮送到輸出屏幕,但它並沒有在STDOUT或STDERR中被minitest捕獲。
在我開始寫MINITEST-log4r的寶石:
有測試在MINITEST記錄器輸出的可能性?
如果不是: 任何建議如何實現MINITEST-log4r的創業板?
例子我能想象:
- 定義MINITEST新的輸出器(log4r的:: MinitestOutputter)
- 模擬記錄儀。
- 新的斷言(添加新的輸出器的參數?):
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") }
小字體在這裏。應該是'output = r.gets' – 2016-11-13 13:58:01