2

我是 WCF 的新手。我创建了一个基本服务,工程师使用调试器和 WCFTestClient 对其进行了测试。我从未编写过自己的 WCF 客户端。现在我需要为服务构建单元测试。

我的课程:

IXService
CXService
CServiceLauncher

(是的,我知道 C 前缀不符合当前标准,但我客户的标准要求它。)

我的服务功能可以直接针对 进行测试XService,但我也需要测试CServiceLauncher。我想要做的就是连接到一个 URI 并发现那里是否有一个服务正在运行以及它提供了哪些方法。

我读到的其他问题:

测试大纲:

    public void StartUiTest()
    {
        Uri baseAddress = new Uri("http://localhost:8080/MyService");
        string soapAddress = "soap";
        IUserInterface target = new CServiceLauncher(baseAddress, soapAddress);
        try
        {
            Assert.AreEqual(true, target.StartUi());
            /// @todo Assert.IsTrue(serviceIsRunning);
            /// @todo Assert.IsTrue(service.ExposedMethods.Count() > 4);
            Assert.Inconclusive("This tells us nothing about the service");
        }
        finally
        {
            target.StopUi();
        }
    }
4

2 回答 2

1

我只需要构建一个简单的客户端。

参考: http ://webbeyond.blogspot.com/2012/11/wcf-simple-wcf-client-example.html

  1. 将服务引用添加到测试项目
  2. 添加到测试文件:

    using System.ServiceModel;

    using MyTests.ServiceReferenceNamespace;

try 中的代码现在是:

            Assert.AreEqual(true, target.StartUi());
            XServiceClient client = new XServiceClient();
            client.GetSessionID();
            Assert.AreEqual(CommunicationState.Opened, client.State, "Wrong communication state after first call");
于 2013-05-09T20:59:02.140 回答
0

这不是一个真正的答案,所以请放轻松。

我一直在尝试做类似的事情,并且我了解到集成测试很困难。这很困难,因为您需要执行许多隐藏任务,例如:

  • 确保您可以定期运行测试
  • 确保集成测试可以在测试环境中运行
  • 维护不同的配置文件,因为您的环境将与测试环境不同
  • 配置将自动运行集成测试 (CI) 的东西
  • 祈祷路径、测试环境、配置、托管平台等不会有任何变化
  • 争取安全权限,因为通常测试的东西在没有管理员权限的情况下无法托管 WCF 服务
  • 维护您的测试工具

对我来说,这是一个巨大的头痛,而且收获甚微。不要误会我的意思,集成测试是一件积极的事情,它只是需要大量的时间来开发和支持。

我学到了什么?是不要打扰 WCF 服务的集成测试。相反,我编写了很多单元测试来测试合同、状态和行为。通过涵盖这些,我可以确定软件的质量。我在部署期间与 WCF 的集成作斗争。这通常是配置环境或虚拟机的一场战斗,然后下一次,部署会以(半)自动化的方式顺利进行。

大多数人还会使用Chef等自动部署,这些工具可以完全配置环境并部署 WCF 服务。

于 2013-05-09T19:56:45.203 回答