gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:46 25 4
gpt4 key购买 nike

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

我想在我的一个测试中 stub 的类。

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

我尝试 stub 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: unexpected invocation: MyClass.foo('123')

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

PS:上面是一个精简的示例。我不想每次都重置,我 stub 类方法。

最佳答案

Minitest 将 block 中的方法 stub ,因此您要做的事情很简单。

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

关于Ruby MiniTest UnitTest Stubbing 类方法仅用于一次测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27250136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com