gpt4 book ai didi

ruby - 如何使用 MiniTest 测试记录器消息?

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:51 26 4
gpt4 key购买 nike

我有一个应用程序,我想测试我是否正确来 self 的记录器的消息。

一个简短的例子(你可以在 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::StderrOutputterLog4r::Outputter.stdout 有类似的结果。

所以它似乎被发送到输出屏幕,但它没有被 STDOUT 或 STDERR 中的 minitest 捕获。

在我开始写一个 minitest-log4r-Gem 之前:

是否有可能在 minitest 中测试记录器输出?


如果不是:有关于如何实现 minitest-log4r-Gem 的建议吗?

我能想到的例子:

  • 为 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") }

最佳答案

您可以设置一个管道,将写入器从管道传递到记录器,然后使用管道中的读取器来测试您的断言。

http://ruby-doc.org/core-2.1.0/IO.html#method-c-pipe

类似于:

require 'logger'
r, w = IO.pipe
log = Logger.new(w)
log.info "testing info log message"
output = r.gets
puts "Test passed: #{!!(/testing/ =~ output)}"

关于ruby - 如何使用 MiniTest 测试记录器消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29392292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com