0

对 ruby​​ 相当陌生,玩过 Mini Test 和 log4r,尝试编写一个包装类。

收到以下错误:

$ ruby logger.rb
Run options: --seed 4605

# Running tests:

E

Finished tests in 0.000000s, Inf tests/s, NaN assertions/s.

  1) Error:
test_debug_messages(TestLogger):
ArgumentError: wrong number of arguments (2 for 1)
    /home/jamlopez/scripts/Yatra.Next/rpm_framework/lib/rpm/core/logger.rb:5:in `initialize'
    logger.rb:6:in `new'
    logger.rb:6:in `setup'

1 tests, 0 assertions, 0 failures, 1 errors, 0 skips

这是课程:

class RPMLogger
    def initialize
        require 'log4r', :version=>'=1.1.10'
        @log = Logger.new 'log'
        @log.outputters = Outputter.stdout
        @logfile_location = brpm_home
        @timenow = eval( Time.now.utc.iso8601 )
    end
    def debug( msg )
        @log.debug ( '[DEBUG] ' + @timenow + " #{msg}" )
    end
    def info( msg )
        @log.info ( '[INFO] ' + @timenow + " #{msg}" )
    end
    def warn( msg )
        @log.warn ( '[WARNING] ' + @timenow + " #{msg}" )
    end
    def error( msg )
        @log.error ( '[ERROR] ' + @timenow + " #{msg}" )
    end
    def fatal( msg )
        @log.fatal ( '[FATAL] ' + @timenow + " #{msg}" )
    end
end

这是测试:

require 'minitest/autorun'
require_relative "./../../../lib/rpm/core/logger"

class TestLogger < MiniTest::Unit::TestCase
  def setup
    @logger = RPMLogger.new
    @test_msg = "This is a test log message!"
  end

  def test_debug_messages
    log = @logger.debug( @test_msg )
    assert_match "/^[DEBUG] /", log, msg=nil
  end

end

我将是第一个承认两个文件中可能存在几个错误的人(因为我仍在学习),但我会尝试一步一步来。

我搜索了相关的 SO 文章,并在网上搜索了有关“初始化”的参数。要么他们没有直接关系,要么我误解了他们。任何帮助表示赞赏。

4

1 回答 1

3

您的错误在这一行:

require 'log4r', :version=>'=1.1.10'

我不确定您尝试做什么,但require收到一个参数。该错误wrong number of arguments意味着您正在尝试使用意外数量的参数调用方法。(2 for 1)意味着您正在尝试使用一个参数和两个参数调用方法。

initialize您使用两个参数调用的唯一方法调用是require- 所以这是有问题的方法。

require在大多数情况下,用法位于 ruby​​ 文件的顶部,告诉 ruby​​ 解释器在加载该文件之前应该加载哪些其他 ruby​​ 文件。

require不声明 gem 依赖项,因此 gem 版本在这里无关紧要您可以将这些放在Gemfile文件中。

于 2014-05-06T16:09:04.950 回答