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
4

1 回答 1

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
于 2012-10-25T20:33:22.500 回答