2011-10-11 48 views
4

在我使用test :: unit的测试应用程序中,我需要从各种来源提取大量数据。我只想这样做 - 数据只能读取,不能写入,并且在测试之间不会改变,加载(以及加载的错误检查)需要一些时间。使用Test :: Unit,我如何在所有测试(但不是每个测试)之前运行一段代码?

有些值我每次都想重置,而且这些值很容易,但是如果我想要持久的可访问值,该怎么办?什么是最好的方法来做到这一点?

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

+0

非常类似的问题,除了OP希望一个测试套件之前运行一些代码,不是所有的测试套件之前: http://stackoverflow.com/questions/255969/in-rubys-testunittestcase-how-do-i-override-the-initialize-method –

回答

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可能是一个(单身)类(相应的实例)。

如果你只有一个TestClass中,你可以使用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

您可以将它们放在课程的顶部。他们会被执行,然后你的测试会被执行。

1

你可以在设置方法做到这一点:

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