2012-10-23 65 views
0

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

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

这是第一个源的文件: Run.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>' 

那么,这真的是我自己编写的一个糟糕的代码,或者是一个安装问题? 在此先感谢。

回答

0

我发现了什么不好:

在文件Run.rb,在那里我定义我的TestCase的子类:

  1. 的DrawTest类,如测试::单位的子类:: 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]