如何加速WCF"单元"测试?(创建/关闭ServiceHost很慢......)

Ian*_*ose 5 .net wcf unit-testing

我正在为在WCF中实现的服务器编写一些测试,因为消息很复杂,并且对我希望在测试中包含WCF的客户端进行回调.

(您可能希望将这些"适合"或"集成测试"称为单元测试,WCF两侧的代码将具有更多不使用WCF的详细单元测试.)

由于我的服务器保持状态,我希望检查所有通道是否正常关闭,我的代码如下:

    [SetUp]
    public void SetUp()
    {
        //TODO find a fee port rathern then hard coding
        endPointAddress = "net.tcp://localhost:1234";

        mockEngineManagerImp = new Mock<IEngineManagerImp>();              

        EngineManager engineManager = new EngineManager(mockEngineManagerImp.Object);

        serviceHost = new ServiceHost(engineManager);
        serviceHost.AddServiceEndpoint(
            typeof(IEngineManager), 
            new NetTcpBinding(SecurityMode.None),
            endPointAddress);

        serviceHost.Open();      
    }

    [TearDown]
    public void TearDown()
    {
        serviceHost.Close();
    }
Run Code Online (Sandbox Code Playgroud)

但是我的测试很慢......

如何加快创建和销毁我的ServiceHost?

Ste*_*ger 5

我们停止编写使用WCF的集成测试.在合理的时间内完成整个系统的运行是一项太多的努力.

相反,我们正在测试孤立的逻辑.数据合同的序列化是该领域中最大的错误来源,也是独立于WCF(仅调用DataContractSerializer)进行测试的.经过一些初步的努力,WCF本身直到现在都没有制造麻烦.

我不确定这是否有帮助.


编辑:想想你实际测试的是什么.

  • 你期望找到什么样的错误?
  • 真的没有其他方法可以测试吗?(例如,我们发现了序列化问题的另一种方法)
  • 这种错误发生的可能性有多大?开发人员是否容易避免它?
  • 通过手动测试找到它有多难?(例如,很难找到序列化问题,因为只有一个属性可能会丢失,另一方面,如果客户端甚至无法连接,则很容易找到)


Ian*_*ose 3

感谢所有出色的答案 \xe2\x80\x93 他们都包含有用的指针,

\n\n

我发现我的很多测试都没有关闭客户端通道,这使得服务器通道的关闭要等到客户端的 TCP 连接超时。

\n\n

解决这个问题后,速度提高了 10 倍以上。

\n