¿Cuál es el patrón del Objeto Humilde y cuándo es útil?

Estaba leyendo un artículo de Dino Esposito sobre cómo probar AsyncConrollers en ASP.NET MVC y allí usa el patrón de “Objeto Humble”, sin entrar en muchos detalles.

Tampoco he tenido mucha suerte buscando en Google.

Entonces, ¿cuál es el patrón del objeto humilde? ¿Cuándo sería útil?

Hay una descripción completa en xunitpatterns.com .

Básicamente, usted coloca toda la lógica en un objeto separado que puede probar fácilmente, y su “Objeto Humble” se convierte en una envoltura alrededor de su objeto comprobable; es solo que el objeto humilde también tiene dependencias en cosas que son difíciles de probar, como servicios asíncronos o clases de GUI. La idea es dejar tan poca lógica real en el objeto humilde que no es necesario probarlo, por lo que no es necesario lidiar con la prueba de la dependencia difícil de probar.

Por lo general, implemento este tipo de esto como una Interface – luego puedes usar un marco de simulacro para aplazarlo para las pruebas, y un marco de IoC para inyectar la implementación correcta en el tiempo de ejecución.

Aquí hay un ejemplo de mi proyecto actual:

 public interface IUserInterface { string AskUserWhereToSaveFile( string title, FileType defaultFileType, string defaultFileName = null, params FileType[] otherOptions ); string AskUserToSelectFileToLoad( string title, FileType defaultFileType, params FileType[] fileTypes ); void ShowError(string title, string details); bool AskUserIfTheyWantToRetryAfter(string errorMessage); } 

Mi controlador luego depende de IUserInterface en lugar de una vista concreta, lo que me permite reemplazar las interacciones del usuario con un apéndice para realizar pruebas.