2010-02-11 13 views
14

Me pregunto si alguien sabe de herramientas o técnicas para inyectar automáticamente fallas comunes en un programa .NET en ejecución. Cosas por el estilo ...¿Inyección de fallas para aplicaciones .NET?

  • inyectar aleatoriamente un OutOfMemoryException sobre la asignación al azar
  • inyectar FileNotFoundException al tratar de acceder a los archivos
  • azar se inyectan IO o excepciones de red en el uso de un enchufe.

Así que realmente estoy buscando una manera de interceptar algunas llamadas específicas en el CLR similar a lo que AppVerifier hace para el código Win32 nativo. El objetivo es probar aplicaciones bajo muchas condiciones de error más allá del control de los desarrolladores y asegurarse de que se manejen dichas condiciones.

+0

Desconecte su cable de red? – ChaosPandion

+3

'Sarcasmo' ¿Desconecta la memoria? –

+1

Exactamente :) Hay muchos hacks para hacer esto para diferentes recursos pero no escala. – noctonura

Respuesta

8

Hay un proyecto Codeplex llamado TestAPI que puede hacer la inyección de la falla en tiempo de ejecución. Debe mirar su managed code fault injection API. Utiliza el CLR profiling API para interceptar llamadas a métodos en tiempo de ejecución y modificar su comportamiento.

Eche un vistazo a an example para ver cómo inyectar una excepción en una llamada a método en un exe ya compilado.

+0

Leí un par de ejemplos y creo que se ve realmente prometedor y el hecho de que sea gratuito ciertamente ayuda. – ChaosPandion

+0

Sí, esto se ve muy bien. – noctonura

0

No sé cómo se podría inyectar "aleatoriamente" estas cosas, pero recomendaría que se burlen de la parte que normalmente no está bajo su control, y que el simulacro arroje una excepción en algunas de sus pruebas.

+0

Tengo la sensación de que está hablando de grandes cantidades de código que quiere verificar, así que dudo que pueda rediseñar todo este código para admitir la burla. – ChaosPandion

+0

Yo diría que ese es su problema, pero entiendo las dificultades de lidiar con una gran base de código heredado.No veo una manera de probar adecuadamente estos escenarios sin refactorizar para burlarse, pero tal vez alguien más genere algo. –

5

Typemock Isolator parece ser su mejor apuesta.

Esto es lo que puede hacer, si desea lanzar un FileNotFoundException para simular las pruebas.

En su código de producción, tiene como método

public static Project OpenProject(string filePath) 

Y en su código de prueba, se puede falsificar el OpenProject llamada como ésta

Isolate.WhenCalled(()=>Project.OpenProject(nulll)).WillThrow(new FileNotFoundException()); 

Y cuando el código golpeó OpenProject, un FileNotFoundException será arrojado.

1

Esto no es exactamente correcto con lo que preguntas, pero está relacionado y puede ser útil para el mismo objetivo de mejorar el manejo de excepciones en tu aplicación.

Redgate Excepción Hunter http://www.red-gate.com/products/Exception_Hunter/index.htm

No he utilizado este producto en particular, pero otros productos Redgate He usado eran grandes.

Cuestiones relacionadas