我计划对作为.svc
文件公开的 WCF 服务进行单元测试。可用于对它们进行单元测试的最佳实践是什么。
据我所知,这是可用的选项:
创建一个单独的项目并为 .svc 文件创建代理类,并将它们添加到项目中并对这些代理类进行单元测试。可以使用以下方法创建代理类:
- svcutil.exe
- Visual Studio 的“添加服务参考”选项。
是否有其他最佳选择可用于.svc
使用 nunit 对我的 wcf 文件进行单元测试?
我计划对作为.svc
文件公开的 WCF 服务进行单元测试。可用于对它们进行单元测试的最佳实践是什么。
据我所知,这是可用的选项:
创建一个单独的项目并为 .svc 文件创建代理类,并将它们添加到项目中并对这些代理类进行单元测试。可以使用以下方法创建代理类:
是否有其他最佳选择可用于.svc
使用 nunit 对我的 wcf 文件进行单元测试?
基本上,您不会对服务进行单元测试。您对他们的代码进行单元测试,就好像该代码不在服务中一样。
甚至不要创建服务类的实例。这对于单元测试来说太大了。您将对该类中的代码进行单元测试。请记住,单元测试旨在测试代码的最小可能单元,而不是整个服务。
如果您需要测试服务背后的逻辑,您可以编写简单的单元测试,如下所示:
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,这对于单元测试很有用,因为没有理由测试 Microsoft 的代码。另一方面,集成测试是另一回事。