Ruby MiniTest UnitTest存根类方法仅用于一项测试

man*_*noj 4 ruby unit-testing minitest

我只想为一个测试和其他测试添加一个类方法,我想调用实际方法。我一直在使用rspec和mocha,因此以下行为看起来很奇怪。

我想在一项测试中存根的课程。

class MyClass
  def self.foo(arg)
    return "foo#{arg}"
  end
end
Run Code Online (Sandbox Code Playgroud)

我尝试对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
Run Code Online (Sandbox Code Playgroud)

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

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

PS:上面是一个简化的示例。我不想每次都重置,所以我对类方法进行了设置。

Chr*_*tom 5

块中的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
Run Code Online (Sandbox Code Playgroud)