Размещение службы WCF в модульном тесте с использованием ServiceHost - PullRequest
7 голосов
/ 26 апреля 2011

Я пытаюсь написать некоторые модульные тесты, которые проверяют конечные точки для моей службы WCF, и для этого я хочу разместить службу в самих модульных тестах, а не в IIS. Я нашел эту статью , которую я прочитал, и внес изменения, поэтому я размещаю ее, используя ServiceHost, и я вижу, что модульные тесты пытаются запустить ее, но мне кажется, что она немного ударила проблемы.

Когда я запускаю тесты, я получаю следующую ошибку при открытии сервиса:

Для этой службы требуется ASP.NET совместимость и должны быть размещены в IIS. Либо разместить службу в IIS с включенной совместимостью ASP.NET в web.config или установите AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode свойство к значению, отличному от Обязательно.

Это вызвано следующей настройкой атрибута в моем классе служб:

[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Required )]

Затем я попытался добавить следующее в мой app.config, но, похоже, это ничего не меняет:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

Есть идеи, как мне обойти эту проблему?

1 Ответ

10 голосов
/ 26 апреля 2011

Как указано в сообщении об ошибке, режим совместимости ASP.NET требует размещения службы WCF на веб-сервере ASP.NET .

Если вы хотите запустить некоторые интеграционные тесты для своей службы WCF на локальном компьютере, вы всегда можете разместить службу на сервере разработки Visual Studio (a.k.a. Cassini ). Я настоятельно рекомендую вам взглянуть на CassiniDev , библиотеку с открытым исходным кодом, которая позволяет запускать легкий веб-сервер ASP.NET в процессе , что особенно полезно для сценариев модульного тестирования.

Вот пример того, как вы будете использовать CassiniDev в модульном тесте с использованием MSTest:

[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();
    }
}

Связанные ресурсы:

...