gpt4 book ai didi

ruby - 复杂的 RSpec 参数测试

转载 作者:行者123 更新时间:2023-12-04 02:23:54 25 4
gpt4 key购买 nike

我有一个要测试的方法,该方法正在使用特定对象调用。但是,识别此对象有些复杂,因为我对对象的特定实例不感兴趣,而是对符合某些条件的实例感兴趣。

例如,我的代码可能是这样的:

some_complex_object = ComplexObject.generate(params)
my_function(some_complex_object)

在我的测试中,我想检查一下
test_complex_object = ComplexObject.generate(test_params)
subject.should_receive(:my_function).with(test_complex_object)

但我肯定知道 ComplexObject#== 在比较 falsesome_complex_object 时会返回 test_complex_object 因为这是所需的行为(在其他地方我依赖标准 == 行为,所以不想为 ComplexObject 重载它)。

我认为这是一个问题,我发现自己需要编写这样的测试,并且更愿意重构代码以便我不需要编写这样的测试,但不幸的是,这是一项更大的任务,需要重写了大量现有代码,因此是一个长期修复,我想实现但现在无法在时间限制内完成。

有没有办法使用 Rspec 来对测试中的参数进行更复杂的比较?理想情况下,我想要一些可以使用块的东西,这样我就可以编写任意的比较代码。

最佳答案

有关如何提供块以对传递给方法的参数进行任意分析的信息,请参见 https://www.relishapp.com/rspec/rspec-mocks/v/2-7/docs/argument-matchers,如下所示:

expect(subject).to receive(:my_function) do |test_complex_object|
# code setting expectations on test_complex_object
end

您还可以定义一个自定义匹配器,它可以让您评估对象以查看是否满足条件,如 https://www.relishapp.com/rspec/rspec-expectations/v/2-3/docs/custom-matchers/define-matcher 中所述

关于ruby - 复杂的 RSpec 参数测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24830684/

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