我计划对作为.svc
文件公开的WCF服务进行单元测试。有哪些可用于单元测试的最佳实践。
至于我知道这是可用的选项:
创建一个单独的项目,并为.svc文件创建代理类,并将它们添加到项目中,并对这些代理类进行单元测试。 可以使用以下命令创建代理类:
还有其他最好的选项可以使用nunit对我的wcf .svc
文件进行单元测试吗?
答案 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();
}
链接:
答案 2 :(得分:1)
如果您只想测试服务的逻辑,只需实例化实现逻辑的类并调用其方法即可。这必然绕过WCF,这对单元测试很有用,因为没有理由测试微软的代码。另一方面,集成测试则是另一回事。