2012-01-30 5 views
5

Прошло несколько часов сегодня, пытаясь написать некоторые модульные тесты против проекта ASP.NET. Это Visual Studio 2010.Единичное тестирование ASP.NET Windows7/IIS7

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

шагов я взял были:

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

Когда следующие точные действия на моем Windows XP Professional с IIS6 машине это работает отлично.

Однако на ОС Windows 7 Enterprise машины на IIS7 я получаю:

URL, указанный ('HTTP: // локальный/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 

(Cross-вывешены на ASP.NET Forums)

ответ

1

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

+0

Не IIS Express, но полный IIS установлен с Windows 7 Enterprise. Я просмотрел каждую страницу свойств проекта для проекта модульного тестирования, и я не вижу опции «Использовать IIS», где этот параметр? – bgs264

+0

Свойства веб-проекта: Веб -> Раздел сервера -> Использовать локальный сервер IIS – Mharlin

+0

Спасибо - это правильно установлено, и веб-проект уже работает отлично, только проект тестирования, который этого не делает. – bgs264

3

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

Взгляните на этот вопрос для идеи о What is unit testing Вот MSDN Magazine article about testing Вы также можете посмотреть на этой Blog. В примерах используется NUnit, но принцип тот же, если вы используете MSTest.

Я также могу рекомендовать Рой Osheroves книгу Art of unit testing

В вас случае, если класс член не имеет зависимостей для веб-контекста не нуждаются в 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 
+0

Спасибо за баллы, но это не отвечает на вопрос. Я уже пытаюсь проверить только один метод одного класса. Однако все классы являются частью веб-проекта, а не отдельной библиотекой классов и не могут быть изменены. – bgs264

+0

Вам не нужно разбивать их на отдельные классы. Дело в том, что вы можете тестировать только класс Member.vb и его членов, если у него нет каких-либо зависимостей от веб-контекста, который вам не нужен, чтобы запускать IIS. – Mharlin

+0

Я понимаю, но член определен в контексте проекта веб-сайта (в App_Code на веб-сайте), а не в рамках класса тестирования. Я не хочу менять свою архитектуру. Я просто хочу, чтобы Windows 7/IIS7 работала так же, как установка Windows XP/IIS6 - там, где она работает. Извините, но это мой вопрос :) – bgs264

4

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

Если вы используете каталог по умолчанию (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 и посмотрите, поможет ли это.

+0

Спасибо, это было в c: \ projects - я не мог найти способ добавить разрешение для идентификатора пула приложений, однако то, что я сделал, это изменить идентификатор, используемый пулом приложений для «Сетевой службы» и добавленные разрешения для этой учетной записи в папку. Это не имело никакого значения, это была та же ошибка. – bgs264

+0

Для чего это стоит, вот ссылка на дополнительную информацию о том, как установить AppPoolIdentity в IIS (см. Раздел «Обеспечение ресурсов» для предоставления ему разрешений в папке): [Идентификаторы пула приложений] (http://learn.iis.net /page.aspx/624/application-pool-identities/). – timamm

+0

Используйте время ссылки, указанное для получения разрешения на идентификацию appPool.Идентификаторы пула приложений более безопасны, чем сетевое обслуживание. – RickAndMSFT

3

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

(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) 

Это привело меня к this blog post, который, кажется, решен вопрос.

Мне просто нужно было включить или выключить функции Windows, а также добавить совместимость управления IIS 6 и все четыре подкомпонента. Я запускаю Windows 7 Home Premium, у которого нет опции проверки подлинности Windows, но это не похоже на проблему. Дайте ему шанс и посмотрите, разрешит ли это вам проблему.

Смежные вопросы