【问题标题】:Running the same test multiple times with different setups使用不同的设置多次运行相同的测试
【发布时间】:2012-10-25 20:14:18
【问题描述】:

有没有人知道在不同上下文中运行同一组测试的好方法。这是一个想用两种不同设置运行相同测试的荒谬示例。我不想为了可以有不同的设置而重复相同的测试。

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

【问题讨论】:

    标签: ruby-on-rails testunit shoulda


    【解决方案1】:

    我以前用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
    

    【讨论】:

    • 这行得通,但我很难将该 proc 移动到上下文中,因此我的测试不会变得混乱。一旦我将 proc 移动到上下文中,我就无法弄清楚如何在 merge_block 语句中引用它。你知道我的意思吗?
    • 是的,我知道你的意思。因为它需要是一个类方法,所以它必须存在于上下文之外。您可以在上下文中将变量设置为 Proc 并将其合并,而不是将其定义为返回 Proc 的方法。不过看起来还是有点乱。
    猜你喜欢
    • 2013-06-13
    • 2014-02-19
    • 2016-07-20
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多