Estoy buscando algunos consejos para probar la unidad de manera que no se dejen "ganchos de prueba" en el código de producción.. Prueba de unidad .NET - Mejores prácticas para ocultar costuras de prueba en el código de versión
Digamos que tengo una clase estática (Módulo VB.NET) llamada MethodLogger que tiene un método "WriteEntry vacío (mensaje de cadena)" que está destinado a escribir el método de llamada y un mensaje a un archivo de registro en el disco. El objetivo real de WriteEntry() se puede desviar a una implementación falsa de IMethodLogger para ejecutar pruebas unitarias, y para todos los casos debe llamar a la implementación real de IMethodLogger.
Aquí hay un corte basto de lo que he azotado hasta ahora, y me gusta el enfoque - pero en algunas pruebas rápidas que plantea algunas preguntas y dudas:
[InternalAttributesVisibleTo("MethodLogger.Tests")]
internal static class MethodLogger
{
public void WriteEntry(string message)
{
LogWriter.WriteEntry(message);
}
private IMethodLogger LogWriter
{
get;
set;
}
#if DEBUG
internal void SetLogWriter(IMethodLogger logger)
{
LogWriter = logger;
}
#endif
}
Aquí están mis preguntas específicas:
Esto estrecha las pruebas unitarias para ejecutar contra la compilación DEBUG; cuando realizo pruebas unitarias, aunque parece que no reconstruye específicamente el conjunto bajo prueba en DEPURACIÓN - ¿es posible hacerlo?
- ¿Alguna vez quisiera ejecutar las pruebas de unidad contra una compilación sin depuración? En la parte superior de mi cabeza veo menos valor, pero ¿existiría?
¿Sería posible para mí usar un indicador de precompilador personalizado como "PRUEBA" en lugar de "DEPURAR"? ¿Cómo voy a decirle a Visual Studio que siempre reconstruya el objetivo con esta bandera para probar para asegurar que mis ganchos/costuras estén disponibles?
¿Ha considerado un marco AOP para esto? Como postrarrespira –
@Chris S: No, en realidad es una nueva abreviatura para mí: un rápido vistazo a las definiciones me hace pensar un poco sobre el COI (que también soy muy verde). ¿Alguna distinción o diferencia particular entre los dos? – STW