在RSpec中,如果要存根(stub)被测类内部实例化的类,可以使用RSpec的allow_any_instance_of
方法。该方法允许我们为被测类的实例化对象设置一个存根,以便在测试中替代原始的实例化行为。
下面是一个示例代码:
class MyClass
def initialize
@dependency = Dependency.new
end
def do_something
@dependency.do_something_else
end
end
class Dependency
def do_something_else
# 实际的实现
end
end
RSpec.describe MyClass do
describe '#do_something' do
it 'calls do_something_else on the dependency' do
# 存根被测类内部实例化的类
allow_any_instance_of(Dependency).to receive(:do_something_else)
my_object = MyClass.new
my_object.do_something
# 断言被存根的方法被调用
expect_any_instance_of(Dependency).to have_received(:do_something_else)
end
end
end
在上述示例中,我们使用allow_any_instance_of
方法为Dependency
类的实例化对象设置了一个存根。这样,在测试中,当MyClass
的实例调用do_something
方法时,实际上不会执行Dependency
类的do_something_else
方法,而是使用存根代替。
这种方法适用于需要在测试中控制被测类内部实例化对象行为的情况。通过存根,我们可以模拟各种场景,例如模拟依赖类的返回值、模拟依赖类的异常等,以确保被测类的行为符合预期。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云