【发布时间】:2014-05-07 18:05:53
【问题描述】:
我有一项服务,我想在不使用“真实”存储库的情况下进行测试,而是使用模拟存储库。 主程序
ServiceManager service = new ServiceManager();
Customer c = new Customer();
//set customer properties
service.Save(c);
服务
public class ServiceManager
{
public bool Save(Customer customer)
{
Repository rep = new Repository();
bool res = rep.Save((customer));
return res;
}
}
在测试中,我不想真正拯救客户。 使用模拟,我可以创建存储库
var rep = new Mock<Repository>();
rep.Setup(x => x.Save(customer)).Returns(true);
但是如何使用这个模拟存储库而不是真实存储库调用测试服务?
如果可能的话,我不想创建像 new ServiceManager(repository) 这样的服务;
另一种方法是使用存储库工厂,如果我们在测试中返回模拟,而在现实世界中返回真实存储库,例如
public static class repositoryFactory
{
private static Repository mockRepository;
public static void setRepository(Repository rep){
mockRepository = rep;
}
public static Repository getRepository(){
if (mockRepository == null)
return new Repository();
else
return mockRepository;
}
}
在这种情况下,在测试中我使用 setRepository 来保存模拟。 一般采用的最佳解决方案是什么?
【问题讨论】:
标签: design-patterns moq