使用Test :: Unit,如何在所有测试之前运行一些代码(但不是每次测试)?

时间:2011-10-11 16:36:31

标签: ruby testing testunit

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

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

我对能够将这些作业推送到可以包含在我的所有测试中的某些模块的解决方案特别感兴趣,因为他们都需要访问这些数据。

3 个答案:

答案 0 :(得分:3)

为什么在测试中需要它?你可以将它定义为gloabl:

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

答案 1 :(得分:2)

你可以把它们放在班级的顶端。它们将被执行,然后你的测试将被执行。

答案 2 :(得分:2)

您可以在设置方法中执行此操作:

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