2012-10-25 80 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

相關問題