Ruby MiniTest UnitTest Stubbing Class方法仅用于一次测试

时间:2014-12-02 13:02:39

标签: ruby unit-testing minitest

我想为一个测试存在一个类方法,对于其余的测试,我希望调用实际的方法。我一直在使用rspec和mocha,所以下面的行为看起来很奇怪。

我希望在我的一个测试中存根的类。

class MyClass
  def self.foo(arg)
    return "foo#{arg}"
  end
end

我尝试存根MyClass.foo的测试

class XYZTest < Minitest::Test
  def test_1
    MyClass.expects(:foo).returns('abcd')
    assert_equal MyClass.foo('123'), 'abcd'
  end

  def test_2
    assert_equal MyClass.foo('123'), 'foo123'
  end
end

第一个测试通过,但是第二个测试失败,说明了Mocha :: ExpectationError:意外调用:MyClass.foo('123')

在test_2中,我希望调用实际的类方法,而不是我在test_1中执行的存根。

PS:上面是一个条纹下来的例子。我不想每次都重置,我将类方法存根。

1 个答案:

答案 0 :(得分:3)

块中的Minitest存根方法,所以你要做的就是简单。

class XYZTest < Minitest::Test
  # stubbed here
  def test_1
    MyClass.stub(:foo, 'abcd') do
      assert_equal MyClass.foo('123'), 'abcd'
    end
  end

  # not stubbed here
  def test_2
    assert_equal MyClass.foo('123'), 'foo123'
  end
end