Actualmente estoy trabajando en una aplicación de servidor si hemos acordado intentar y mantener un cierto nivel de servicio. El nivel de servicio que queremos garantizar es: si el servidor acepta una solicitud y el servidor envía un acuse de recibo al cliente, queremos garantizar que la solicitud se realice, incluso si el servidor falla. Como las solicitudes pueden ser de larga duración y el tiempo de acuse de recibo debe ser breve, lo implementamos persistiendo en la solicitud, enviando un acuse de recibo al cliente y luego llevando a cabo las diversas acciones para cumplir con la solicitud. A medida que se llevan a cabo las acciones, también se mantienen, por lo que el servidor conoce el estado de una solicitud al inicio, y también hay varios mecanismos de reconciliación con sistemas externos para verificar la precisión de nuestros registros.Prueba de código tolerante a errores
Todo parece funcionar bastante bien, pero tenemos dificultades para decirlo con convicción, ya que nos resulta muy difícil probar nuestro código tolerante a errores. Hasta aquí hemos llegado con dos estrategias pero tampoco es del todo satisfactoria:
- Tener un proceso externo ver el código del servidor y luego tratar de acabar con él en lo que piensa el proceso externo es un punto apropiado de la prueba
- Añadir un código de la aplicación que va a hacer que se caiga una determinada saben puntos críticos
Mi problema con la primera estrategia es el proceso externo no puede conocer el estado exacto de la aplicación, por lo que no puede estar seguro de que' Estoy golpeando los puntos más problemáticos en el código. Mi problema con la segunda estrategia, aunque da más control sobre las fallas, es que no me gusta tener código para inyectar fallas dentro de mi aplicación, incluso con compilación opcional, etc. Temo que sería demasiado fácil pasar por alto una falla punto de inyección y hacer que se deslice en un entorno de producción.
¿Dónde puedo encontrar más información sobre "interceptores de prueba de choque" en la plataforma .NET? Aunque usamos DI para pruebas unitarias, no creo que funcione demasiado bien para las pruebas de integración. Hay dos razones para esto: primero queremos que las pruebas de integración estén lo más cerca posible del código que se ejecutará en producción y, en segundo lugar, exigir que el código inyectado cause la falla tendría un impacto significativo (e indeseable) en cómo diseñamos los diversos módulos de la aplicación. – Robert
Hola Robert, hay algunas buenas lecturas aquí http://www.sharpcrafters.com/aop.net/runtime-weaving – Justin
También un buen ejemplo usando Spring.NET http://www.developer.com/net/csharp/ article.php/3795031/Aspect-Oriented-Programming-AOP-with-SpringNet.htm – Justin