我想知道这是否是在我的测试中避免调用 3rd 方服务的好策略。
我有 2 个类,它们封装了对我称为 PersonIdentifier 和 FIleManager 的 3rd 方服务的调用。
为了使这些类可测试,我将它们传递给另一个类的构造函数,如下所示:
CreateContact.new(current_user, input, PersonIdentifier.new, FileManager.new)
但是这个 CreateContact 实例的创建可能在类方法或实例方法中。所以在类方法的情况下,我创建另一个创建实例的类方法,例如
def self.create_contact(current_user, input)
CreateContact.new(current_user, input, PersonIdentifier.new, FileManager.new)
end
然后在我的测试中,我使用 instance_eval 来覆盖这个方法,例如
def setup
super
EmailIdentifier.instance_eval do
def create_contact(current_user, input)
CreateContact.new(current_user, input, TestPersonIdentifier.new, TestFileManager.new)
end
end
end
在我的测试设置中添加多个 class_eval 或 instance_eval 有点痛苦。
有没有更好的办法?