2010-02-11 11 views
9

Estoy a punto de crear un servicio web que será consumido por un sistema personalizado interno que no sea .NET. Me gustaría obtener algunos consejos sobre la mejor manera de configurar clases de prueba y métodos a través de .asmx (mejores prácticas, cómo probar las llamadas, qué no hacer, etc.) específicamente en un entorno .NET 3.5.Consejo de prueba de la unidad: cómo probar la unidad .asmx

Voy a utilizar NUnit para hacer esta prueba. ¿Es tan simple como crear un proyecto de prueba, agregarle el servicio y luego crear una clase de prueba e instancia de ese servicio ... y luego comenzar a crear sus métodos de prueba?

Necesito probar los métodos .asmx y .asmx.cs (pruebe los métodos por unidad) para saber si le paso esto a un compañero de equipo que va a funcionar.

Quizás no sea posible probar un .asmx.cs directamente y solo tendré que realizar pruebas mediante pruebas de integración. Creo que lo que realmente necesitaría es burlarme de mi .asmx. Probablemente no sea posible.

Respuesta

8

La mejor práctica de una prueba unitaria no es probar el archivo asmx, sino las partes (unidades) detrás de el archivo asmx. Si puedes dividir tu código en piezas pequeñas y separadas, entonces puedes probar esas piezas por separado.

Si quiere probar el archivo asmx, está hablando de una prueba de integración. Puedes usar NUnit para eso en la forma descrita, pero eso no es realmente una prueba unitaria.

+0

Estoy queriendo UNIT probar los métodos en. asmx.cs. Así que mi pregunta aún no se ha resuelto porque en mi proyecto de prueba unitaria, creo que no estoy seguro de cómo hacer llamadas a .asmx.cs. En otras palabras, si mi servicio se llama MyService.asmx, quiero crear una prueba de unidad MyServiceTest que pruebe específicamente los métodos .asmx.cs. Necesito probar ambos como si fuera un consumidor de la prueba de Sercie Y Unit al mismo tiempo para saber si obtengo algún error dentro de cualquier método .asmx.cs. Básicamente, el punto es que creé un servicio interno y mi jefe lo va a utilizar. Acabo de terminar con los métodos. – PositiveGuy

+0

Así que supongo que mis preguntas siguen en pie. Creé la solución MyTestProject y en ella un proyecto C# que albergará mis clases de prueba. Luego, agregué el proyecto web a la misma solución y quiero probar las llamadas al .asmx y también probar los métodos en .asmx.cs – PositiveGuy

+0

. Puede mover los métodos fuera de asmx.cs (al menos las partes que deben ser probado) en una nueva clase y prueba eso? – Davy8

0

Como Lodewijk declaró, es una buena práctica no probar el archivo asmx. En su lugar, extraiga la lógica de ese archivo en archivos de clase que manejen el comportamiento que busca. De esa manera, entonces puede probar esas clases en forma aislada desde la IU. Puede encontrar que el problema real que tiene es que hay demasiada lógica comercial en su capa de interfaz de usuario.

Si desea probar el archivo asmx en sí mismo, tendrá que considerar las pruebas manuales, las pruebas de integración o las pruebas de aceptación ... pero si puede mover su lógica a la capa de negocios, probablemente la encuentre mucho más fácil de probar

+0

Ya tengo un proyecto BL para eso. Gracias de todos modos. Estas son envolturas alrededor de llamadas BL. – PositiveGuy

1

Lamentablemente, este es un problema con los servicios web .asmx, dependen de ASP.net, lo mejor sería mantener el servicio web .asmx como un resguardo y extraer la lógica del servicio web en una dependencia limpia -la prueba de clase y unidad libre que en su lugar. La otra alternativa es ejecutar pruebas de integración también.

A largo plazo, si las pruebas unitarias son importantes para usted, es mejor que desarrolle usando un web service framework que fue diseñado con pruebas unitarias desde el principio.

3

Puede que te estés perdiendo el sentido de lo que otras personas dicen. El archivo .asmx debe tener sin ninguna lógica que valga la pena probar. Si realmente es solo una envoltura alrededor de las llamadas de la capa empresarial, entonces no agrega nada y no necesita ser probado. Si agrega algo, extráigalo hasta que el .asmx no contenga nada más que una llamada de paso.

¿Qué contiene el archivo .asmx que no se puede extraer en clases independientes y comprobables?

+0

es un envoltorio con lógica adicional, como registro, etc. Es un paso a mi proyecto de envoltura de PayPal y a las envolturas de llamadas allí ... pero los envoltorios no siempre están de paso sin hacer ningún registro, actualización de ALGUNOS registros de nuestro lado, etc. – PositiveGuy

+0

Podría adivinar extraer en clases separadas. Copiaré los métodos en una clase de prueba y luego agregaré esa clase a mi proyecto de prueba. – PositiveGuy