【发布时间】:2010-10-19 21:17:59
【问题描述】:
我有一个 WCF 服务,它公开了 1 个方法 GetNextObjectInList(int id),它访问了一个 DB。
WCF 服务或多或少像这样工作:
public class MyService : IDisposable
{
public MyService()
{
this.IntializeDBConnection();
}
public int GetNextObjectInList(int id)
{
/* uses DB connection */
}
/* Dispose releases DB connection */
}
这使得客户端代码相对简单:
public void UseNextElementInList()
{
IMyService svc = new MyServiceClient();
int nextID = svc.GetNextObjectInList(this.ID);
/* use object */
}
我已经编写了单元测试来测试 WCF 服务对象,但我想测试消费者代码的各种事情,例如计时/性能/错误处理,但我不知道如何构建我的测试,以便服务未命中数据库。
我的大多数测试(例如针对服务对象运行的测试)都创建了一个内存数据库,但我不知道如何在服务中没有特定于测试的代码的情况下让服务连接到该数据库。
【问题讨论】:
-
界面...爱他们,学习他们,他们会让你的生活变得轻松。始终写入接口。
-
@Aaron... 我正在针对该服务的接口编写代码。是不是建议我注入服务的接口,在测试环境中模拟出来?
-
Yessum...这样 MyService 就会显示为 IService...,然后用于测试的模拟 IService 不会进行数据库调用。
-
@Aaron:不幸的是,这不是我想要测试的。我想测试客户端代码和实际服务协同工作的集成。
-
我很困惑,因为解决方案似乎使用接口来允许构建测试服务,因此您可以调用接口...您是否担心服务的消耗?电线?客户对返回的数据做了什么?
标签: c# wcf unit-testing integration-testing