У меня есть приложение, и я хочу проверить, получаю ли я правильные сообщения от моего регистратора.
Короткий пример (вы можете переключаться между log4r и регистратором):
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
и Log4r::Outputter.stdout
.
Таким образом, кажется, что он отправляется на экран вывода, но не перехватывается минитестом в STDOUT или STDERR.
Прежде чем я начну писать minitest-log4r-Gem:
Есть ли возможность протестировать вывод регистратора в минитесте?
Если нет: какие-нибудь рекомендации по реализации minitest-log4r-Gem?
Примеры того, что я мог представить:
- определить новый модуль вывода для минитеста (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") }