4

我计划对作为.svc文件公开的 WCF 服务进行单元测试。可用于对它们进行单元测试的最佳实践是什么。

据我所知,这是可用的选项:

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

  1. svcutil.exe
  2. Visual Studio 的“添加服务参考”选项。

是否有其他最佳选择可用于.svc使用 nunit 对我的 wcf 文件进行单元测试?

4

3 回答 3

3

基本上,您不会对服务进行单元测试。您对他们的代码进行单元测试,就好像该代码不在服务中一样。

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

于 2012-11-02T07:39:43.873 回答
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();
    }

链接:

集成测试 WCF 服务

于 2012-11-02T07:31:41.960 回答
1

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

于 2012-11-02T07:30:34.237 回答