2012-01-30 13 views
5

Ho trascorso diverse ore oggi cercando di scrivere alcuni test unitari su un progetto ASP.NET. È Visual Studio 2010.Test unità ASP.NET Windows7/IIS7

Utilizzo di Windows 7 Enterprise con IIS7.

passi che ho preso erano:

  1. Aggiunto un nuovo progetto di test alla soluzione
  2. aperto un file di classe, come parte del sito web (Member.vb)
  3. destra scattata all'interno del file di classe e "Genera test unitari"
  4. Selezionare i metodi per cui generare stub, scegliere di aggiungere al progetto di test, fare clic su OK
  5. Aprire il file MemberTest.vb generato nel progetto di test, fare clic all'interno di uno dei g test enerated, fare clic su "prove eseguite nel contesto di curent"

Quando seguendo questi passaggi precisi sulla mia Windows XP Professional con IIS6 macchina funziona benissimo.

Tuttavia sulla di Windows 7 Enterprise macchina su IIS7 ottengo:

L'URL specificato ('http: // localhost/MyProject') non corrisponde a una directory valida. Test configurati per l'esecuzione in ASP.NET in IIS richiede una directory valida per l'URL. L'URL potrebbe essere non valido o non indirizzare a un'applicazione Web valida.

Quindi, che cosa sta succedendo, posso confermare che posso navigare a http://localhost/MyProject e viene visualizzato perfettamente.

Sono sicuro che mi manca una sorta di configurazione in Windows/IIS ma sono davvero in perdita.

metodo generato prova:

<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-postato a ASP.NET Forums)

risposta

1

Potrebbe essere necessario attivare "Usa IIS" nelle proprietà del progetto, quindi fare clic su "Crea directory virtuale". Hai installato IIS Express?

+0

Non IIS Express, ma IIS completo installato con Windows 7 Enterprise. Ho esaminato ogni pagina delle proprietà del progetto per il progetto di test unitario e non riesco a vedere un'opzione chiamata "Usa IIS", dov'è questa opzione? – bgs264

+0

le proprietà del progetto Web: Web -> Sezione server -> Usa server IIS locale – Mharlin

+0

Grazie - Questo è impostato correttamente e il progetto Web funziona già correttamente, solo il progetto di test che non lo fa. – bgs264

3

Se non hai ancora fatto test di unità, ti consiglio di iniziare semplicemente testando la funzionalità delle tue classi nel modo più pulito possibile. Cerca di spezzarti funzionalità in piccoli pezzi che possono essere testati individualmente senza e dipendenze dal contesto web.

Date un'occhiata a questa domanda per un'idea su What is unit testing Ecco un MSDN Magazine article about testing si può anche avere uno sguardo a questo Blog. Gli esempi utilizzano NUnit ma il principale è lo stesso se si utilizza MSTest.

Posso anche raccomandare Roy Osheroves Prenota Art of unit testing

Nel caso si se la classe membro non ha dipendenze di contesto web non è necessario l'IIS e invece potrebbe semplicemente fare qualcosa di simile:

<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

Grazie per i punti ma questo non risponde alla domanda. Sto già provando a testare un solo metodo di una classe. Tuttavia tutte le classi fanno parte del progetto web, non in una libreria di classi separata e non possono essere modificate. – bgs264

+0

Non è necessario suddividerli in classi separate. Il punto è che puoi testare solo la classe Member.vb e i suoi membri se non ha alcuna dipendenza dal contesto web che non è necessario attivare IIS. – Mharlin

+0

Capisco- ma Membro è definito nel contesto del progetto del sito web (in App_Code del sito Web), e non nell'ambito della classe di test. Non desidero cambiare la mia architettura. Desidero semplicemente che la macchina Windows 7/IIS7 funzioni allo stesso modo della configurazione di Windows XP/IIS6, dove funziona. Scusa, ma è quello che la mia domanda è :) – bgs264

4

Questo potrebbe essere un problema di autorizzazioni.

Se si utilizza la directory predefinita (C: \ users \\ Documents \ Visual Studio 2010 \ Projects), il pool di identità dell'app non dispone delle autorizzazioni lì. Dovresti creare un progetto in qualcosa come C: \ webs e assicurarti che l'identità del pool di applicazioni abbia l'autorizzazione per la cartella.

Fare riferimento al post sul blog di Rick Anderson allo 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 e vedere se questo aiuta.

+0

Grazie, è stato in c: \ progetti - Non sono riuscito a trovare un modo per aggiungere il permesso per l'identità del pool di applicazioni, tuttavia quello che ho fatto è di cambiare il identità utilizzata dal pool di applicazioni a "Servizio di rete" e autorizzazioni aggiunte per questo account alla cartella. Non ha fatto alcuna differenza, era ancora lo stesso errore. – bgs264

+0

Per quello che vale, ecco un collegamento su maggiori informazioni su come impostare AppPoolIdentity in IIS (consultare la sezione Protezione delle risorse per assegnargli permessi su una cartella): [Identità pool di applicazioni] (http://learn.iis.net /page.aspx/624/application-pool-identities/). – timamm

+0

Utilizza il tempo di collegamento citato per concedere l'autorizzazione all'appenetPool.Le identità del pool di applicazioni sono più sicure del servizio di rete. – RickAndMSFT

3

Ho incontrato lo stesso problema oggi. Dopo alcune ricerche, ho trovato this thread che suggeriva di controllare il registro degli eventi. Al momento di farlo, ho scoperto numerosi errori simili ai seguenti:

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

che mi portano a this blog post che sembra aver risolto il problema.

Avevo solo bisogno di andare a "Attivare o disattivare le funzionalità di Windows" e aggiungere IIS 6 Management Compatibility e tutti e quattro i sottocomponenti. Sono in esecuzione Windows 7 Home Premium che non ha l'opzione di autenticazione di Windows, ma non sembra essere un problema. Fai un tentativo e vedi se questo risolve il problema per te.