【问题标题】:Failed to define a simple unit test testcase未能定义简单的单元测试测试用例
【发布时间】:2012-10-13 14:14:51
【问题描述】:

我正在尝试使用测试单元在 Ruby 1.9.1(Ubuntu Linux 12.04 64 位)中做一个简单的测试用例:但它说我的 TestCase 的初始化方法缺少参数。当我进一步查看错误时,它告诉我它试图启动 /usr/lib/ruby/1.9.1/minitest。

但是,我之前安装了测试单元 gem。

这是第一个源文件: 运行.rb

#!/usr/bin/env ruby

require "test/unit"
require_relative "NumbersSet.rb"

def draw_result
    the_drawn_result = nil
    loop do
        the_drawn_result = rand(1000)
        break if the_drawn_result >= 100
    end
    the_drawn_result
end

def do_operation(operation, number_1, number_2)
    return nil if number_1 < 1 or number_2 < 1
    number_1, number_2 = number_2, number_1 if  number_1 < number_2
    case operation
        when :add
            result = number_1 + number_2
            return "#{number_1} + #{number_2} = #{result}", result
        when :sub
            return nil if number_1 == number_2 # A zero result will not help us
            result = number_1 - number_2
            return "#{number_1} - #{number_2} = #{result}", result
        when :mul
            return nil if number_1 == 1 or number_2 == 1 # Otherwise, this would be identity operation
            result = number_1 * number_2
            return "#{number_1} * #{number_2} = #{result}", result
        when :div
            return nil if number_1 == 1 or number_2 == 1 # Otherwise, this could be identity operation
            return nil if number_1 % number_2 != 0
            result = number_1 / number_2
            return "#{number_1} / #{number_2} = #{result}", result
        else
            raise "Unknown operation #{operation} !"
    end
end

def play
    drawn_numbers = NumbersSet.draw
    puts drawn_numbers.inspect, draw_result
end

class DrawTest < Test::Unit::TestCase
    def draw_test

        assert_equal(nil, do_operation(:add, -3, 1))
        assert_equal(nil, do_operation(:add, 1, -1))
        assert_equal(nil, do_operation(:add, 5, 0))
        assert_equal(nil, do_operation(:add, 0, 5))
        assert_equal(nil, do_operation(:add, 3, 5))
        assert_equal(nil, do_operation(:add, 5, 3))

        assert_equal(nil, do_operation(:sub, 5, 3))
        assert_equal(nil, do_operation(:sub, 3, 5))
        assert_equal(nil, do_operation(:sub, 3, 3))

        assert_equal(nil, do_operation(:mul, 3, 5))
        assert_equal(nil, do_operation(:mul, 5, 3))
        assert_equal(nil, do_operation(:mul, 3, 1))
        assert_equal(nil, do_operation(:mul, 1, 3))

        assert_equal(nil, do_operation(:div, 20, 3))
        assert_equal(nil, do_operation(:div, 3, 20))
        assert_equal(nil, do_operation(:div, 20, 1))
        assert_equal(nil, do_operation(:div, 1, 20))
        assert_equal(nil, do_operation(:div, 20, 4))
        assert_equal(nil, do_operation(:div, 5, 20))

    end
end

OPERATIONS = [:add, :sub, :mul, :div]

DrawTest.new.draw_test

这是第二个文件:NumbersSet.rb

class NumbersSet

    def self.draw
        plaques = {}
        (1..10).each { |value| plaques[value] = 2}
        [25,50,75,100].each { |value| plaques[value] = 1}

        draw_possibilities = (1..10).to_a << 25 << 50 << 75 << 100
        the_draw = []
        6.times do |loop_index|
            drawn_number_index = nil
            loop do
                drawn_number_index = rand(draw_possibilities.size)
                break if plaques[draw_possibilities[drawn_number_index]] > 0
            end
            the_draw << draw_possibilities[drawn_number_index]
            plaques[draw_possibilities[drawn_number_index]] -= 1
        end
        the_draw
    end

end

这是终端错误:

$ ./Run.rb 
/usr/lib/ruby/1.9.1/minitest/unit.rb:971:in `initialize': wrong number of arguments (0 for 1) (ArgumentError)
    from ./Run.rb:77:in `new'
    from ./Run.rb:77:in `<main>'

那么,这真的是我自己的错误编码,还是安装问题? 提前致谢。

【问题讨论】:

    标签: ruby unit-testing ruby-1.9.1


    【解决方案1】:

    我发现了问题所在:

    在文件 Run.rb 中,我定义了我的 TestCase 子类:

    1. DrawTest 类作为 Test::Unit::TestCase 的子类,其测试方法的名称必须以 test => 开头,所以 draw_test 不是。
    2. 我不能像在以前的版本中那样创建 DrawTest 类的实例

    所以这个源文件更好:

    #!/usr/bin/env ruby
    
    require "test/unit"
    require_relative "NumbersSet.rb"
    
    def draw_result
        the_drawn_result = nil
        loop do
            the_drawn_result = rand(1000)
            break if the_drawn_result >= 100
        end
        the_drawn_result
    end
    
    def do_operation(operation, number_1, number_2)
        return nil if number_1 < 1 or number_2 < 1
        number_1, number_2 = number_2, number_1 if  number_1 < number_2
        case operation
            when :add
                result = number_1 + number_2
                return "#{number_1} + #{number_2} = #{result}", result
            when :sub
                return nil if number_1 == number_2 # A zero result will not help us
                result = number_1 - number_2
                return "#{number_1} - #{number_2} = #{result}", result
            when :mul
                return nil if number_1 == 1 or number_2 == 1 # Otherwise, this would be identity operation
                result = number_1 * number_2
                return "#{number_1} * #{number_2} = #{result}", result
            when :div
                return nil if number_1 == 1 or number_2 == 1 # Otherwise, this could be identity operation
                return nil if number_1 % number_2 != 0
                result = number_1 / number_2
                return "#{number_1} / #{number_2} = #{result}", result
            else
                raise "Unknown operation #{operation} !"
        end
    end
    
    def play
        drawn_numbers = NumbersSet.draw
        puts drawn_numbers.inspect, draw_result
    end
    
    class DrawTest < Test::Unit::TestCase
        def test_draw
    
            assert_equal(nil, do_operation(:add, -3, 1))
            assert_equal(nil, do_operation(:add, 1, -1))
            assert_equal(nil, do_operation(:add, 5, 0))
            assert_equal(nil, do_operation(:add, 0, 5))
    
            assert_equal(nil, do_operation(:sub, -3, 1))
            assert_equal(nil, do_operation(:sub, 1, -1))
            assert_equal(nil, do_operation(:sub, 5, 0))
            assert_equal(nil, do_operation(:sub, 0, 5))
    
            assert_equal(nil, do_operation(:mul, -3, 1))
            assert_equal(nil, do_operation(:mul, 1, -1))
            assert_equal(nil, do_operation(:mul, 5, 0))
            assert_equal(nil, do_operation(:mul, 0, 5))
    
            assert_equal(nil, do_operation(:div, -3, 1))
            assert_equal(nil, do_operation(:div, 1, -1))
            assert_equal(nil, do_operation(:div, 5, 0))
            assert_equal(nil, do_operation(:div, 0, 5))
    
            assert_equal(nil, do_operation(:add, 3, 5))
            assert_equal(nil, do_operation(:add, 5, 3))
    
            assert_equal(nil, do_operation(:sub, 5, 3))
            assert_equal(nil, do_operation(:sub, 3, 5))
            assert_equal(nil, do_operation(:sub, 3, 3))
    
            assert_equal(nil, do_operation(:mul, 3, 5))
            assert_equal(nil, do_operation(:mul, 5, 3))
            assert_equal(nil, do_operation(:mul, 3, 1))
            assert_equal(nil, do_operation(:mul, 1, 3))
    
            assert_equal(nil, do_operation(:div, 20, 3))
            assert_equal(nil, do_operation(:div, 3, 20))
            assert_equal(nil, do_operation(:div, 20, 1))
            assert_equal(nil, do_operation(:div, 1, 20))
            assert_equal(nil, do_operation(:div, 20, 4))
            assert_equal(nil, do_operation(:div, 5, 20))
    
        end
    end
    
    OPERATIONS = [:add, :sub, :mul, :div]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2019-03-26
      • 2012-01-08
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多