不修改原有代码前提下能否使用RSpec测试Ruby类私有实例变量
结论
可以在不修改原有代码的前提下完成测试。
实现方式
Ruby原生提供了instance_variable_get方法支持读取对象的私有实例变量,你可以直接在RSpec用例中调用该方法取值断言,示例测试代码如下:
RSpec.describe A do it '初始化时正确赋值实例变量@arg' do test_input = 123 a_instance = A.new(test_input) expect(a_instance.instance_variable_get(:@arg)).to eq(test_input) end end
注意事项
这种测试方式耦合了类的内部实现细节,仅推荐在特殊场景下使用。常规测试场景更建议通过公开接口验证类的行为,而非直接断言私有实例变量的取值,避免内部实现迭代时测试无故失败。
内容的提问来源于stack exchange,提问作者Karol Selak
相关产品推荐
相关产品推荐

