设置Web 服务时,我可以让它使用存储库类来获取数据以发送回客户端。如果我需要对服务执行的逻辑进行单元测试,我可以在其中注入对虚假存储库的引用,该存储库返回少量硬编码数据对象以避免调用数据库。
然而,在客户端,假设我有一个基于 MVC 的 Web 应用程序,它通过服务代理调用此 Web 服务。 如果我想对 MVC 应用程序中的逻辑进行单元测试并为其提供代表服务返回内容的数据,我该如何伪造代理引用? 因此,我的想法是,尽管我对此没有 100% 的信心,并且想知道我是否会错过一个更简单的解决方案:
我可以设置一个代理接口(我们称之为IProxy),然后设置它的两个具体实现(比如说,Proxy和FakeProxy)并注入一个适合正在执行的情况的一个(运行单元测试时的 FakeProxy 和 Proxy for实际生产应用)。为了在不进行实际服务调用的情况下为单元测试生成一些示例数据,我是否应该在假代理中实现一个假存储库(可能与上述服务器场景中使用的相同)? 我不确定如何最好地设置一个假代理类来帮助测试我的客户端代码。
更新:
我同意到目前为止发布的答案,但我已经考虑了他们的观点,所以让我提供一些示例 C# 代码来说明我为什么要问这个问题。如果我在代理设计中留下一个假存储库,我的假代理可能看起来像这个非常简单的人为示例:
public class FakeCustomerProxy : ICustomerProxy
{
private List<Customer> Customers;
public FakeProxy()
{
Customers = new List<Customer>();
Customers.Add(new Customer { Id = 1, Name = "Smith, John" });
Customers.Add(new Customer { Id = 2, Name = "Johnson, Al" });
Customers.Add(new Customer { Id = 3, Name = "Thomas, William" });
}
public Customer GetById(int customerId)
{
return Customers.Where(c => c.Id == customerId).FirstOrDefault();
}
}
GetById ()方法不是调用 Web 服务来获取所需的客户信息,而是简单地从嵌入在此类中的硬编码客户列表中返回它。这真的开始类似于我可能为假存储库设置的内容(我什至可能在服务器端设置了看起来非常相似的代码来帮助测试服务逻辑),所以我很好奇是否应该考虑放置这些硬编码的客户引用到一个专用的假存储库类以在多个地方使用。 我可能在考虑这个 Fake Proxy 的设计完全错误吗?