如何使用UnitTest WCF .SVC文件

时间:2012-11-02 06:50:32

标签: wcf unit-testing nunit

我计划对作为.svc文件公开的WCF服务进行单元测试。有哪些可用于单元测试的最佳实践。

至于我知道这是可用的选项:

创建一个单独的项目,并为.svc文件创建代理类,并将它们添加到项目中,并对这些代理类进行单元测试。    可以使用以下命令创建代理类:

  1. svcutil.exe的
  2. visual studio的“添加服务参考”选项。
  3. 还有其他最好的选项可以使用nunit对我的wcf .svc文件进行单元测试吗?

3 个答案:

答案 0 :(得分:3)

基本上,您不对设备进行单元测试。您可以对其代码进行单元测试,就好像该代码不在服务中一样。

甚至不创建服务类的实例。单元测试太重要了。您将对该类中的代码进行单元测试。请记住,单元测试旨在测试代码的最小可能单位,而不是整个服务。

答案 1 :(得分:2)

如果您需要测试服务背后的逻辑,您可以编写简单的单元测试,如下所示:

public class Service1 : IService1
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
}
//Tests
[TestFixture]
public class MyService_Test
{
    [Test]
    public void GetData_should_return_entered_string()
    {
        Service1 service = new Service1();
        Assert.AreEqual("You entered: 1", service.GetData(1));
    }
}

如果要测试整个集成,可以编写以下集成测试。简而言之,您需要以自托管方式运行服务,并使用_proxy来执行服务方法。当您需要测试自定义消息检查器,错误处理程序等扩展点时,此类测试非常有用。

    private ITestService _proxy;
    private ServiceHost _host;

    [SetUp]
    public void Initialize()
    {
        const string baseAddress = "net.pipe://localhost/TestService";
        _host = new ServiceHost(typeof(TestService), new Uri(baseAddress));

        var factory = new ChannelFactory<ITestService>(new NetNamedPipeBinding(),
                                                       new EndpointAddress(baseAddress));
        _host.Open();
        _proxy = factory.CreateChannel();
    }

链接:

Integration Testing WCF Services

答案 2 :(得分:1)

如果您只想测试服务的逻辑,只需实例化实现逻辑的类并调用其方法即可。这必然绕过WCF,这对单元测试很有用,因为没有理由测试微软的代码。另一方面,集成测试则是另一回事。