ASP.NET модульное тестирование Windows7 / IIS7 - PullRequest
5 голосов
/ 30 января 2012

Сегодня провел несколько часов, пытаясь написать несколько модульных тестов для проекта ASP.NET. Это Visual Studio 2010.

Использование Windows 7 Enterprise с IIS7.

Шаги, которые я предпринял, были:

  1. В решение добавлен новый тестовый проект
  2. Открыл файл класса как часть веб-сайта (Member.vb)
  3. Щелчок правой кнопкой мыши в файле класса и «Создание модульных тестов»
  4. Выберите методы, для которых я хочу создать заглушки, добавьте их в мой тестовый проект, нажмите OK
  5. Откройте сгенерированный файл MemberTest.vb в тестовом проекте, щелкните внутри одного из сгенерированных тестов, нажмите «Выполнить тесты в текущем контексте»

При выполнении этих точных шагов на моем Windows XP Professional с IIS6 машина работает нормально.

Однако на компьютере Windows 7 Enterprise на IIS7 я получаю:

Указанный URL-адрес ('http://localhost/MyProject') не соответствуют действительному каталогу. Тесты настроены для запуска в ASP.NET в IIS требует наличия действующего каталога для URL. URL может быть неверный или может не указывать на действительное веб-приложение.

Так что происходит, я могу подтвердить, что могу перейти к http://localhost/MyProject, и он отображается отлично.

Я уверен, что мне не хватает какой-то конфигурации в Windows / IIS, но я действительно в растерянности.

Сгенерированный метод испытания:

<TestMethod(), _
 HostType("ASP.NET"), _
 UrlToTest("http://localhost/MyProject")> _
Public Sub MyMethodTest()
    Dim target As Member_Accessor = New Member_Accessor() ' TODO: Initialize to an appropriate value
    Dim CurrentVal As Short = 0 ' TODO: Initialize to an appropriate value
    Dim expected As Short = 0 ' TODO: Initialize to an appropriate value
    Dim actual As Short
    actual = target.MyMethod(CurrentVal)
    Assert.AreEqual(expected, actual)
    Assert.Inconclusive("Verify the correctness of this test method.")
End Sub

(Кросс-пост на Форумы ASP.NET )

Ответы [ 4 ]

4 голосов
/ 07 февраля 2012

Это может быть проблема с разрешениями.

Если вы используете каталог по умолчанию (C: \ users \\ Documents \ Visual Studio 2010 \ Projects), пул удостоверений приложений там не имеет разрешений. Вам нужно будет создать проект в чем-то вроде C: \ webs и убедиться, что у удостоверения пула приложений есть разрешение на доступ к папке.

Обратитесь к сообщению в блоге Рика Андерсона по адресу http://blogs.msdn.com/b/rickandy/archive/2011/04/22/test-you-asp-net-mvc-or-webforms-application-on-iis-7-in-30-seconds.aspx и посмотрите, поможет ли это.

3 голосов
/ 06 мая 2012

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

 (QTAgent32.exe, PID 12348, Thread 61) WebSites.GetWebServer: failed to
 create AspNetHelper:
 Microsoft.VisualStudio.Enterprise.Common.AspNetHelperException: The
 website metabase contains unexpected information or you do not have
 permission to access the metabase.  You must be a member of the
 Administrators group on the local computer to access the IIS metabase.
 Therefore, you cannot create or open a local IIS Web site.  If you
 have Read, Write, and Modify Permissions for the folder where the
 files are located, you can create a file system web site that points
 to the folder in order to proceed. --->
 System.Runtime.InteropServices.COMException: Unknown error
 (0x80005000)

, которые привели меня к этому сообщению в блоге , которое, похоже, решило проблему.

Iпросто нужно перейти к разделу «Включение или отключение функций Windows» и добавить IIS 6 Management Compatibility и все четыре подкомпонента.Я использую Windows 7 Home Premium, у которой нет опции аутентификации Windows, но это не проблема.Попробуйте и посмотрите, решит ли это проблему для вас.

3 голосов
/ 03 февраля 2012

Если вы раньше не проводили модульное тестирование, я действительно рекомендовал бы начать с простого тестирования функциональности ваших классов. Постарайтесь разбить свою функциональность на небольшие части, которые можно протестировать по отдельности, без зависимостей от веб-контекста.

Посмотрите на этот вопрос, чтобы получить представление о Что такое модульное тестирование Вот статья MSDN Magazine о тестировании Вы также можете посмотреть этот блог . В примерах используется NUnit, но основной принцип тот же, если вы используете MSTest.

Я также могу порекомендовать книгу Роя Ошеровеса Искусство юнит-тестирования

В том случае, если у класса Member нет зависимостей от веб-контекста, вам не нужен IIS, и вместо этого вы можете просто сделать что-то вроде этого:

<TestMethod()> _
Public Sub MyMethodTest()
    Dim target = New Member() 
    Dim CurrentVal As Short = 0 ' TODO: Initialize to an appropriate value
    Dim expected As Short = 0 ' TODO: Initialize to an appropriate value
    Dim actual As Short
    actual = member.MyMethod(CurrentVal)
    Assert.AreEqual(expected, actual)
End Sub
1 голос
/ 02 февраля 2012

Возможно, вам потребуется включить «Использовать IIS» в свойствах проекта, затем нажать «Создать виртуальный каталог». У вас установлен IIS Express?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...