使用Test::Unit,我如何在所有测试(但不是每个测试)之前运行一小段代码



在我的测试应用程序中,它使用test::unit,我需要从各种来源提取一堆数据。我只希望这样做一次——数据只被读取,而不是写入,并且在测试之间不会改变,并且加载(以及加载的错误检查)需要一些时间。

有一些值我想每次重置,这些都很容易,但如果我想要持久可访问的值呢?最好的方法是什么?

我特别感兴趣的解决方案,可以让我把这些分配到一些模块,可以包括在我的所有测试,因为他们都需要访问这些数据。

为什么在测试中需要它?您可以将其定义为全局:

gem 'test-unit'#, '>= 2.1.1' #startup
require 'test/unit'
GLOBAL_DATA = 11
class My_Tests < Test::Unit::TestCase
  def test_1()
    puts "Testing startup 1"
    assert_equal(11, GLOBAL_DATA)
  end
end

GLOBAL_DATA可以是一个(单例)类(相对于实例)。

如果你只有一个测试类,你可以使用TestCase.startup:

gem 'test-unit'#, '>= 2.1.1' #startup
require 'test/unit'

class My_Tests < Test::Unit::TestCase
  def self.startup
    puts "Define global_data "
    @@global_data = 11
  end
  def test_1()
    puts "Testing 1"
    assert_equal(11,     @@global_data = 11)
  end
  def test_2()
    puts "Testing 2"
    assert_equal(11,     @@global_data = 11)
  end
end

你可以把它们放在类的顶部。它们会被执行,然后你的测试也会被执行。

您可以在setup方法中这样做:

  def setup
    if !defined?(@@initial_data)
      # Whatever you need to do to get your initial data
      @@initial_data = foo
    end
    @other_data = bar
  end

最新更新