使用ServiceHost在单元测试中托管WCF服务

Ric*_*per 7 .net asp.net wcf unit-testing mstest

我正在尝试编写一些单元测试来测试我的WCF服务的端点,为此我想在单元测试本身而不是在IIS中托管服务.我找到了这篇文章,我已经阅读并进行了更改,所以我使用它进行托管ServiceHost,我可以看到单元测试试图运行它但我似乎遇到了一些问题.

当我运行测试时,我在打开服务时收到以下错误:

此服务需要ASP.NET兼容性,并且必须在IIS中托管.在IIS中托管服务并在web.config中启用ASP.NET兼容性,或将AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode属性设置为Required以外的值.

这是由我的服务类上的以下属性设置引起的:

[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Required )]
Run Code Online (Sandbox Code Playgroud)

然后我尝试将以下内容添加到我的app.config中,但它似乎没有任何区别:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

我有什么想法可以解决这个问题吗?

Enr*_*lio 10

如错误消息所述,ASP.NET兼容模式要求将WCF服务托管在ASP.NET Web服务器中.

如果您希望在本地计算机上对WCF服务运行某些集成测试,则可以始终在Visual Studio开发服务器(也称为Cassini)中托管该服务.我强烈建议您查看CassiniDev,这是一个允许在进程中运行轻量级ASP.NET Web服务器的开源库,这对于单元测试场景尤其有用.

以下是如何使用MSTest在单元测试中使用CassiniDev的示例:

[TestClass]
public class MyServiceTest
{
    private CassiniDevServer host;

    [TestInitialize]
    public void SetUp()
    {
        var host = new CassiniDevServer();
        host.StartServer(@"RelativePathToServiceProjectDir", 8080, "/", "localhost");
    }

    [TestCleanup]
    public void TearDown()
    {
       host.StopServer();
    }
}
Run Code Online (Sandbox Code Playgroud)

相关资源: