【问题标题】:Use test/unit with anonymous TestCase使用带有匿名 TestCase 的测试/单元
【发布时间】:2013-01-20 21:21:13
【问题描述】:

本题属于 zu test-unit version 2.5.3

测试单元版本 2.5.4 解决的问题

我有一个包含许多匿名测试用例的测试。它适用于测试单元 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

没有执行任何测试,我在testrunner.rb:361 中收到错误undefined method sub' for nil:NilClass (NoMethodError)(我使用实际的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

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

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:in sort_by'中)。

我的问题:

  • 如何避免该错误?
  • 或者:如何创建具有动态分配常量的测试用例?

【问题讨论】:

  • 我以为我理解了你的问题,并试图解释为什么它不起作用......但实际上你是对的。这个版本的 Test::Unit 需要一个有名字的类

标签: ruby unit-testing anonymous anonymous-class


【解决方案1】:

这似乎是由于最新版本的 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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多