2012-01-30 12 views
5

Pasé varias horas hoy tratando de escribir algunas pruebas de unidad contra un proyecto ASP.NET. Es Visual Studio 2010.Prueba de unidad ASP.NET Windows7/IIS7

Uso de Windows 7 Enterprise con IIS7.

pasos que tomó eran:

  1. añadido un nuevo proyecto de prueba a la solución
  2. abierto un archivo de clase como parte de la página web (Member.vb)
  3. hace clic derecho en el archivo de clase y "generar pruebas unitarias"
  4. Seleccionar los métodos que desean generar recibos para, optar por añadir a mi proyecto de prueba, haga clic en Aceptar
  5. abrir el archivo MemberTest.vb generado en el proyecto de prueba, haga clic en una de las gramo enerated pruebas, haga clic en "Ejecutar pruebas en el contexto curent"

Al seguir estos pasos precisos sobre mi Windows XP Professional con IIS6 máquina que funciona bien.

Sin embargo en la máquina 7 Enterprise Windows en IIS7 me sale:

La dirección URL especificada ('http: // localhost/MiProyecto') no corresponde a un directorio válido. Las pruebas configuradas para ejecutarse en ASP.NET en IIS requieren que exista un directorio válido para la URL. La URL puede ser inválida o no puede apuntar a una aplicación web válida.

Entonces, ¿qué ocurre? Puedo confirmar que puedo buscar http://localhost/MyProject y se muestra perfectamente.

Estoy seguro de que me falta algún tipo de configuración en Windows/IIS, pero estoy realmente perdido.

método generado prueba:

<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-publicado en ASP.NET Forums)

Respuesta

1

Es posible que tenga que habilitar "Uso de IIS" en las propiedades del proyecto, a continuación, haga clic en "Crear directorio virtual". ¿Tiene IIS Express instalado?

+0

No IIS Express, pero IIS completo instalado con Windows 7 Enterprise. He buscado en cada página de las propiedades del proyecto para el proyecto de prueba de la unidad y no puedo ver una opción llamada "Usar IIS", ¿dónde está esta opción? – bgs264

+0

Propiedades del proyecto web: Web -> Sección del servidor -> Usar servidor IIS local – Mharlin

+0

Gracias - Esto está configurado correctamente y el proyecto web ya funciona bien, solo el proyecto de prueba que no lo hace. – bgs264

3

Si no ha realizado las pruebas unitarias antes, realmente le recomiendo que empiece simplemente probando la funcionalidad de sus clases lo más limpiamente posible. Intente dividir su funcionalidad en pequeños fragmentos que puedan probarse individualmente sin dependencias ni en el contexto de la web.

Tener un vistazo a esta pregunta por una idea acerca de What is unit testing He aquí un MSDN Magazine article about testing También puede echar un vistazo a este Blog. Los ejemplos usan NUnit pero el principal es el mismo si está utilizando MSTest.

También puedo recomendar Roy Osheroves libro Art of unit testing

En caso de que si la clase de miembro no tiene dependencias a contexto web que no necesita el IIS y en su lugar sólo podría hacer algo como esto:

<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

Gracias por los puntos, pero esto no responde la pregunta. Ya estoy tratando de probar solo un método de una clase. Sin embargo, todas las clases son parte del proyecto web, no en una biblioteca de clases separada, y eso no se puede cambiar. – bgs264

+0

No necesita dividirlos en clases separadas. El punto es que puedes probar solo la clase Member.vb y sus miembros, si no tiene ninguna dependencia del contexto web, no necesitas iniciar el IIS. – Mharlin

+0

Entiendo, pero el miembro se define dentro del contexto del proyecto del sitio web (en App_Code del sitio web) y no dentro del alcance de la clase de prueba. No deseo cambiar mi arquitectura. Simplemente deseo que la máquina Windows 7/IIS7 funcione de la misma manera que la configuración de Windows XP/IIS6, donde funciona. Lo siento, pero esa es mi pregunta :) – bgs264

4

Esto podría ser un problema de permisos.

Si está utilizando el directorio predeterminado (C: \ users \\ Documents \ Visual Studio 2010 \ Projects), el grupo de identidades de la aplicación no tiene permisos allí. Tendría que crear un proyecto en algo así como C: \ webs y asegurarse de que la identidad del conjunto de aplicaciones tenga permiso para la carpeta.

Consulte la publicación de blog de Rick Anderson en 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 y vea si eso ayuda.

+0

Gracias, estaba en c: \ projects - No pude encontrar una manera de agregar el permiso para la identidad del grupo de aplicaciones, sin embargo, lo que he hecho es cambiar el identidad utilizada por el grupo de aplicaciones para 'Servicio de red' y permisos agregados para esta cuenta a la carpeta. No hizo ninguna diferencia, todavía era el mismo error. – bgs264

+0

Por lo que vale, aquí hay un enlace para obtener más información sobre cómo configurar AppPoolIdentity en IIS (vea la sección de Protección de recursos para otorgarle permisos en una carpeta): [Application Pool Identities] (http://learn.iis.net /page.aspx/624/application-pool-identities/). – timamm

+0

Utilice el tiempo de enlace citado para otorgar el permiso de idenidad de la aplicación.Las identidades del conjunto de aplicaciones son más seguras que el servicio de red. – RickAndMSFT

3

Me encontré con el mismo problema hoy. Después de algunas investigaciones, encontré this thread que me sugirió que revisara mi registro de eventos. Al hacer eso, he descubierto numerosos errores similares a los siguientes:

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

que me llevan a this blog post que parece haber resuelto el problema.

Solo tenía que ir a "Activar o desactivar las características de Windows" y agregar compatibilidad con la administración de IIS 6 y los cuatro subcomponentes. Estoy ejecutando Windows 7 Home Premium que no tiene la opción de Autenticación de Windows, pero eso no parece ser un problema. Pruébalo y ve si eso resuelve el problema para ti.