2012-10-25 81 views
2

有没有人知道在不同的环境下运行同一组测试的好方法。这是一个荒谬的例子,想用两种不同的设置来运行相同的测试。我不想重复相同的测试,所以我可以有不同的设置。用不同的设置多次运行相同的测试

context 'cat' do 
    setup do 
    @object = cat 
    .... 
    end 

    should 'walk' do 
    assert @object.walk? 
    ... 
    end 

    should 'run' do 
    assert @object.run? 
    ... 
    end 
end 

context 'dog' do 
    setup do 
    @object = dog 
    .... 
    end 

    should 'walk' do 
    assert @object.walk? 
    ... 
    end 

    should 'run' do 
    assert @object.run? 
    ... 
    end 
end 

回答

3

我以前用merge_block做过。在测试中定义一个类方法,返回应用程序的Proc,然后在适当的位置合并它。

def self.walk_and_run 
    Proc.new do 
    should 'walk' do 
     assert @object.walk? 
    end 
    should 'run' do 
     assert @object.run? 
    end 
    end 
end 

context 'cat' do 
    setup do 
    @object = cat 
    end 
    merge_block(&walk_and_run) 
end 

context 'dog' do 
    setup do 
    @object = dog 
    end 
    merge_block(&walk_and_run) 
end 
+0

这很有效,但我很难将该过程移动到上下文中,所以我的测试不会混乱。一旦我将proc移动到上下文中,我无法弄清楚如何在merge_block语句中引用它。你知道我的意思? –

+0

是的,我知道你的意思。因为它需要是一个类方法,所以它必须在上下文之外。你可能可以在上下文中设置一个变量作为Proc并将其合并,而不是将其定义为返回Proc的方法。它可能仍然看起来有点混乱。 – Shadwell

相关问题