如何通过点击终点来实际对wcf服务进行单元测试

时间:2016-06-27 23:28:47

标签: c# wcf unit-testing

我正在尝试通过实际获取数据并验证它的端点来实现wcf服务的集成测试。我不能使用依赖注入,因为代码是遗留的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以通过创建测试项目(在相同的解决方案中)来创建集成测试,该测试项目向WCF服务添加服务引用,并在从WCF生成的服务客户端上执行方法。

为了澄清术语,集成测试是在系统中运行多个单元并验证它们的交互。这通常是端到端地完成,这意味着它将运行整个WCF服务,因为它将在已部署的服务器上执行。

您提到无法使用依赖注入,但这种关注通常仅适用于您尝试执行单元测试的情况。

对WCF进行端点级单元测试很困难,我不知道有一个很好理解的方法来单元测试服务的网络级别。

您可以使用依赖注入对服务类进行单元测试,然后编写断言关于应用于类的正确属性的断言(通过反射),但许多人会质疑它的价值,因为您可能会测试此服务在部署到生产之前降低环境。

答案 1 :(得分:0)

当我有一个WCF服务进行测试时,我将单元测试分解为序列化和服务测试。您在WCF中遇到的大量问题与序列化失败有关。这可以单独测试,非常简单: -

  1. 实例化DataContract
  2. 使用测试数据填充
  3. 序列化数据合同
  4. 反序列化数据合同
  5. 将步骤4中创建的对象与步骤2中的对象进行比较。
  6. 另一组测试将独立测试业务层。

    最后为了测试服务的端到端操作,许多人可能会批评我使用的方法,但我发现它有效,我的测试将交叉关联服务调用,比较结果以确保一致性。例如测试可能会创建一条记录,调用获取创建的记录并进行断言,更新记录,再次获取记录并进行断言,删除记录,再次尝试获取记录以断言它被删除。测试只使用普通的wcf客户端代理。

    我意识到有许多类型的服务,你可能有一些比简单的CRUD应用程序更复杂的东西,但通常有一种方法可以创建一个相互交叉检查的单元测试。