使用带有匿名TestCase的test / unit

时间:2013-01-20 21:21:14

标签: ruby unit-testing anonymous anonymous-class

此问题属于zu test-unit version 2.5.3

测试单元版本2.5.4

解决了问题

我对许多匿名TestCases进行了测试。它适用于测试单元2.5.0,但实际版本2.5.3会产生错误。

当我运行此测试时:

gem 'test-unit', ">=2.5.2"
require 'test/unit'
Class.new( Test::Unit::TestCase ) do
  def test_add
    assert_equal( 2, 1+1)
  end
end

没有执行任何测试,我在undefined method sub' for nil:NilClass (NoMethodError)中收到错误testrunner.rb:361(我使用的是实际的test-unit-gem 2.5.3)。

使用TestCase的名称,问题消失了:

gem 'test-unit'
require 'test/unit'
X = Class.new( Test::Unit::TestCase ) do
  def test_add
    assert_equal( 2, 1+1)
  end
end

在我真正的问题中,我生成了许多TestCase。所以我有这样的情况:

gem 'test-unit'
require 'test/unit'
2.times {
  X = Class.new( Test::Unit::TestCase ) do
    def test_add
      assert_equal( 2, 1+1)
    end
  end
}

如果我执行此操作,我会收到警告already initialized constant X并出现错误: comparison of Array with Array failed (ArgumentError)(在collector.rb:48:sort_by'中)。

我的问题:

  • 如何避免错误?
  • 或者:如何使用动态分配的常量创建TestCases?

1 个答案:

答案 0 :(得分:3)

这似乎归结为test-unit gem的最新版本的更改,现在需要一个类的可读名称。

这样的东西会起作用

gem 'test-unit', ">=2.5.2"
require 'test/unit'

Class.new( Test::Unit::TestCase ) do
  def test_add
    assert_equal( 2, 1+1)
  end

  def self.to_s
    "GeneratedClass"
  end

  def self.name
    to_s
  end
end