2012-01-30 14 views
5

Spędziłem dzisiaj kilka godzin próbując napisać kilka testów jednostkowych przeciwko projektowi ASP.NET. To Visual Studio 2010.Testowanie jednostki ASP.NET Windows7/IIS7

Korzystanie z Windows 7 Enterprise z IIS7.

kroki wziąłem to:

  1. dodał nowy projekt testowy do roztworu
  2. Otwarty plik klasy jako część strony internetowej (Member.vb)
  3. kliknięciu prawym przyciskiem myszy w pliku klasy i "Wygeneruj testy jednostkowe"
  4. Wybierz metody, dla których chcę generować kody, dodaj do mojego projektu testowego, kliknij OK.
  5. Otwórz wygenerowany plik MemberTest.vb w projekcie testowym, kliknij w jednym z sol Testy enerated, kliknij przycisk „Uruchom testy w curent kontekście”

Po wykonaniu tych czynności na precyzyjne moim Windows XP Professional z IIS6 komputerze działa prawidłowo.

Jednak na systemu Windows 7 Enterprise na maszynie IIS7 uzyskać:

URL określony ('http: // localhost/myproject') nie nie odpowiada prawidłowy. Testy skonfigurowane do uruchamiania w środowisku ASP.NET pod numerem Usługi IIS wymagają istnienia prawidłowego katalogu dla adresu URL. Adres URL może być nieprawidłowy lub może nie wskazywać na prawidłową aplikację internetową.

Co się dzieje, mogę potwierdzić, że mogę przeglądać do http://localhost/MyProject i wyświetla się idealnie.

Jestem pewien, że brakuje mi jakiejś konfiguracji w Windows/IIS, ale jestem naprawdę na straconej pozycji.

Generated Metoda badawcza:

<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-pisał w ASP.NET Forums)

Odpowiedz

1

może trzeba włączyć "Użyj IIS" we właściwościach projektu, a następnie kliknij "Create Virtual Directory". Czy masz zainstalowany IIS Express?

+0

Nie IIS Express, ale pełny IIS zainstalowany z Windows 7 Enterprise. Sprawdziłem na każdej stronie właściwości projektu dla projektu testowania jednostkowego i nie widzę opcji o nazwie "Użyj IIS", gdzie jest ta opcja? – bgs264

+0

Właściwości projektu WWW: Web -> Sekcja serwera -> Użyj lokalnego serwera IIS – Mharlin

+0

Dzięki - Ustawiono to prawidłowo, a projekt internetowy już działa poprawnie, tylko projekt testowy, który nie działa. – bgs264

3

Jeśli wcześniej nie przeprowadzałeś testów jednostkowych, naprawdę poleciłbym rozpocząć od testowania funkcjonalności twoich zajęć tak czysto, jak to możliwe. Spróbuj podzielić swoją funkcjonalność na małe kawałki, które można przetestować indywidualnie bez zależności od kontekstu sieci.

Wystarczy popatrzeć na to pytanie pomysłu o What is unit testing Oto MSDN Magazine article about testing Można również spojrzeć na ten Blog. Przykłady używają NUnit, ale główny jest taki sam, jeśli używasz MSTest.

mogę również polecić Roy Osheroves Book Art of unit testing

w tobie przypadku, gdy klasa Użytkownik nie ma zależności od kontekstu internetowej nie trzeba IIS i może zamiast po prostu zrobić coś takiego:

<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

Dzięki za punkty, ale to nie odpowiada na pytanie. Próbuję już przetestować jedną metodę jednej klasy. Jednak wszystkie klasy są częścią projektu WWW, a nie w osobnej bibliotece klas i nie można tego zmienić. – bgs264

+0

Nie musisz ich rozdzielać na osobne klasy. Chodzi o to, że możesz testować jednostkę tylko dla klasy Member.vb i jej członków, jeśli nie ma ona zależności od kontekstu sieci, w którym nie musisz uruchamiać IIS. – Mharlin

+0

Rozumiem - ale element członkowski jest zdefiniowany w kontekście projektu witryny sieci Web (w kodzie App na stronie), a nie w ramach klasy testowej. Nie chcę zmieniać mojej architektury. Po prostu chcę, aby maszyna Windows 7/IIS7 działała w taki sam sposób, jak konfiguracja Windows XP/IIS6 - tam, gdzie działa. Przepraszamy, ale to jest moje pytanie :) – bgs264

4

Może to być problem z uprawnieniami.

Jeśli używasz domyślnego katalogu (C: \ users \\ Documents \ Visual Studio 2010 \ Projects), pula tożsamości aplikacji nie ma tam uprawnień. Musisz utworzyć projekt w stylu C: \ webs i upewnić się, że tożsamość puli aplikacji ma uprawnienia do tego folderu.

Zobacz post na blogu Ricka Andersona pod numerem 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 i sprawdź, czy to pomaga.

+0

Dzięki, to było w c: \ projects - Nie mogłem znaleźć sposobu na dodanie pozwolenia na tożsamość puli aplikacji, jednak to, co zrobiłem, to zmienić tożsamość używana przez pulę aplikacji do "Usługi sieci" i dodała uprawnienia do tego konta do folderu. Nie miało to znaczenia, był to wciąż ten sam błąd. – bgs264

+0

Co jest warte, tutaj jest link do więcej informacji o tym, jak ustawić AppPoolIdentity w IIS (zobacz sekcję Zabezpieczenia zasobów, aby dać uprawnienia do folderu): [Tożsamości puli aplikacji] (http://learn.iis.net /page.aspx/624/application-pool-identities/). – timamm

+0

Użyj podanego czasu połączenia, aby nadać uprawnienia identyfikacyjne appPool.Identyfikatory puli aplikacji są bezpieczniejsze niż usługa sieciowa. – RickAndMSFT

3

Wpadłem dziś na ten sam problem. Po pewnych badaniach znalazłem this thread, co sugerowało, że sprawdzam mój dziennik zdarzeń. Po to robić, odkryłem wiele błędów podobne do następujących:

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

To prowadzi mnie do this blog post który wydaje się być rozwiązany.

Po prostu musiałem przejść do "Włącz lub wyłącz funkcje systemu Windows" i dodać IIS 6 Management Compatibility i wszystkie cztery podskładniki. Używam systemu Windows 7 Home Premium, który nie ma opcji Uwierzytelnianie systemu Windows, ale nie wydaje się to problemem. Daj mu szansę i zobacz, czy to rozwiązuje problem.

Powiązane problemy