面试题答案
一键面试- 实现思路:
- 使用RSpec的
double
方法来创建模拟对象。 - 通过
allow
方法来定义模拟对象的行为,也就是对依赖方法的返回值进行设定。 - 在测试中,将模块中原本调用外部服务的方法替换为调用模拟对象的方法,从而隔离外部服务依赖。
- 使用RSpec的
- 示例代码:
假设我们有如下模块:
对应的RSpec测试代码如下:module MyModule def perform_database_query # 实际的数据库查询操作,这里用一个简单返回值代替 "real database result" end def dependent_method result = perform_database_query "Processed: #{result}" end end
require 'rspec' describe MyModule do let(:my_module) { MyModule.new } it "should isolate the database query dependency" do mock_result = "mocked database result" allow(my_module).to receive(:perform_database_query).and_return(mock_result) expect(my_module.dependent_method).to eq("Processed: #{mock_result}") end end
在上述代码中,通过allow(my_module).to receive(:perform_database_query).and_return(mock_result)
对perform_database_query
方法进行了模拟,返回了预设的mock_result
,从而隔离了实际的数据库查询操作,保证了测试的独立性和稳定性。