单元测试WCF服务正在启动

时间:2013-05-09 19:27:54

标签: c# wcf unit-testing

我是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();
        }
    }

2 个答案:

答案 0 :(得分:1)

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

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

  1. 向测试项目添加服务参考
  2. 添加到测试文件:

    using System.ServiceModel;

    using MyTests.ServiceReferenceNamespace;

  3. try里面的代码现在是:

                Assert.AreEqual(true, target.StartUi());
                XServiceClient client = new XServiceClient();
                client.GetSessionID();
                Assert.AreEqual(CommunicationState.Opened, client.State, "Wrong communication state after first call");
    

答案 1 :(得分:0)

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

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

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

对我来说,这是一个巨大的头痛,收获甚微。不要误解我的意思,集成测试是一件好事,它只需要很多时间来开发和支持。

我学到了什么?这对WCF服务的集成测试没有任何困扰。相反,我写了很多单元测试来测试合同,状态和行为。通过覆盖这些,我可以确保软件质量。我在部署期间对抗WCF的集成。这通常是配置环境或VM的单一战斗,然后下次部署以(半)自动方式顺利进行。

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