现在我正在进行重构,我正在努力解决以下问题。
我有这样的课:
class Example
def self.some_method
if Rails.env.test?
true
else
hit_external_service
end
end
end
现在,我认为将生产代码与测试代码混合到类中并不是很好。我们正在使用 mocha,所以我想删除条件逻辑并为整个测试套件设置一个存根,因为这个方法被到处调用,如下所示:
class ActiveSupport::TestCase
setup do
Example.stub(:some_method).returns(true)
end
end
但是当我想测试原始方法时,我必须“取消存根”它,这看起来也很脏,所以我有点坚持如何做到这一点。
我还想过将外部服务的逻辑提取到另一个类,然后将该类作为可注入依赖项,因此对于整个测试套件,我可以这样做:
Example.external_service = DummyImplementation
然后对于我可以做的真正测试:
Example.external_service = RealImplementation
但这似乎有点矫枉过正,因为逻辑实际上只有 3 行。
那么有什么建议吗?有什么简单的东西可能我没有看到吗?