Actualmente estoy involucrado en el desarrollo con C# - Aquí hay algunos antecedentes: Implementamos MVP con nuestra aplicación cliente y tenemos una regla ciclomática que establece que ningún método debe tener una complejidad ciclomática mayor que 5. Esto lleva a muchos pequeños métodos privados que generalmente son responsables de una cosa.Unidad de prueba de código privado
Mi pregunta es sobre la unidad de prueba de una clase:
Prueba de la aplicación privada a través de los métodos públicos es todo muy bien ... No tengo un problema de la aplicación de este.
Pero ... ¿qué pasa con los siguientes casos:
Ejemplo 1. gestionar el resultado de una solicitud de retrival datos asíncrono (El método de devolución de llamada no debe ser puramente pública para la prueba)
ejemplo 2. un controlador de eventos que realiza una operación (por ejemplo, actualizar el texto de una vista de etiqueta - ejemplo tonto lo sé ...)
ejemplo 3. Está utilizando un marco de terceros que le permite ampliar anulando métodos virtuales protegidos (la ruta de acceso de los métodos públicos a estos métodos virtuales generalmente se trata como programación de caja negra y tendrá todo tipo de dependencias que el marco proporciona 't quiero saber sobre)
Los ejemplos de arriba no me parecen ser el resultado de un diseño deficiente. Tampoco parecen ser candidatos para pasar a una clase separada para realizar las pruebas de forma aislada ya que dichos métodos perderán su contexto.
¿Alguien tiene alguna idea al respecto?
Saludos, Jason
EDIT: no creo que era lo suficientemente claro en mi pregunta original - Puedo probar métodos privados que utilizan métodos de acceso y se burlan de llamadas a cabo utilizando métodos/Typemock. Ese no es el problema. El problema es probar cosas que no necesitan ser públicas o que no pueden ser públicas.
No quiero hacer público el código por el mero hecho de probar, ya que puede introducir lagunas de seguridad (solo publicar una interfaz para ocultar esto no es una opción porque cualquiera puede devolver el objeto a su tipo original y obtener acceso a cosas que no quisiera)
El código que se refactoriza a otra clase para la prueba está bien, pero puede perder contexto. Siempre he pensado que es una mala práctica tener clases de "ayuda" que pueden contener una olla de código sin contexto específico (pensando en SRP aquí). Realmente no creo que esto funcione para controladores de eventos tampoco.
Estoy feliz de que se demuestre que estoy equivocado. ¡No estoy seguro de cómo probar esta funcionalidad! Siempre he pensado que si se puede romper o cambiar, pruébelo.
Cheers, Jason
¿Qué marco de aislamiento va a utilizar? –
Estoy usando Typemock Isolator. Burlarse de las llamadas a los métodos es fácil. ¡Realmente no me gusta tener que hacerlo ya que cambia el comportamiento de la clase que se está probando! – Jason
¡Todo esto me hace desear poder escribir mi propio marco desde el principio para poder diseñar estos problemas desde el principio! – Jason