2012-09-28 32 views
2

我想在初始化时运行一组含有两个不同参数的测试。 我在做什么现在的问题是:为使用ruby的多个实例运行相同的一组测试单元测试

require 'rubygems' 
gem 'test-unit' 
require 'test/unit' 
require 'calc' 

class My_test < Test::Unit::TestCase 
    class << self 
    def startup 
     $obj = Calc.new("test1") 
    end 
    end 

    def test_1 
    #testing $obj method 1 
    end 

    def test_2 
    #testing $obj method 2 
    end 
    . 
    . 
    . 
end 

现在我想用不同的参数进行所有的测试TEST_1 ... test_n说“测试2”,Calc.new(“测试2”)。

这样做的最佳方法是什么?任何建议。 我正在使用宝石测试单元2.5.x

回答

1

您可以将test_1 ...放入模块中并创建2个测试类。

实施例(一个测试是全成,所述第二有错误):

require 'rubygems' 
gem 'test-unit' 
require 'test/unit' 
#~ require 'calc' 

module My_tests 
    def test_1 
    assert_equal(2, 2*@@obj) 
    end 
end 

class My_test1 < Test::Unit::TestCase 
    class << self 
    def startup 
     @@obj = 1 #Calc.new("test1") 
    end 
    end 
    include My_tests 
end 

class My_test2 < Test::Unit::TestCase 
    class << self 
    def startup 
     @@obj = 2 #Calc.new("test1") 
    end 
    end 
    include My_tests 
end 

我不使用全局变量($obj),但一类属性(@@obj)。

也许你应该更好地利用setup

require 'rubygems' 
gem 'test-unit' 
require 'test/unit' 
#~ require 'calc' 

module My_tests 
    def test_1 
    assert_equal(2, 2*@obj) 
    end 
end 

class My_test1 < Test::Unit::TestCase 
    def setup 
    @obj = 1 #Calc.new("test1") 
    end 
    include My_tests 
end 

class My_test2 < Test::Unit::TestCase 
    def setup 
    @obj = 2 #Calc.new("test1") 
    end 
    include My_tests 
end 
+0

这伟大工程,是干净的(容易理解)。我最初使用了实例变量,但当它进入测试方法(test1 ... testn)时,它始终指向NilClass,因此我将其更改为全局。 – user1256045

+0

另外,为什么要使用设置?我只想初始化它一次。 – user1256045

+0

当你只需要一次,那么'startup'就可以了 - 除非你不修改这个属性。如果您在一次测试中修改该属性,则可能会产生副作用。 - 确定你可以冻结你的属性。 – knut

相关问题