我有一个想要测试的方法,该方法正在使用特定对象调用。但是,识别该对象有些复杂,因为我对该对象的特定实例不感兴趣,而是对符合某些条件的对象感兴趣。
例如,我的代码可能是这样的:
some_complex_object = ComplexObject.generate(params)
my_function(some_complex_object)
Run Code Online (Sandbox Code Playgroud)
在我的测试中我想检查一下
test_complex_object = ComplexObject.generate(test_params)
subject.should_receive(:my_function).with(test_complex_object)
Run Code Online (Sandbox Code Playgroud)
但我肯定知道比较时ComplexObject#==会返回,因为这是所需的行为(在其他地方我依赖标准行为,因此不想超载它)。falsesome_complex_objecttest_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
Run Code Online (Sandbox Code Playgroud)
您还可以定义一个自定义匹配器,它可以让您评估对象以查看是否满足条件,如https://www.relishapp.com/rspec/rspec-expectations/v/2-3/docs/custom-中所述匹配器/定义匹配器
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |