Intento seguir buenas prácticas al escribir mis suites de prueba. A mitad de me di cuenta de que el gasto iam mucho (más) de mi tiempo en los falsos objetos ... La mayoría de mis pruebas hace algo como esto¿Pruebas unitarias con falsificaciones o burlas?
public interface ITemplateRepository
{
string get GetGenericTemplate {get;}
}
public FakeTemplateRepository : ITemplateRepository
{
public string GetGenericTemplate()
{
return "<xml>Complex</xml>";
}
}
[Test]
public void CanGetGenericTemplate()
{
ITemplateRepository rep = new FakeTemplateRepository();
Assert.IsNotNull(rep.GetGenericTemplate());
}
[Test]
public void GetGenericTemplateContains()
{
ITemplateRepository rep = new FakeTemplateRepository();
Assert.IsTrue(rep.GetGenericTemplate().StartsWith("<xml>"));
}
realidad me encontré pasar mucho tiempo en el FakeTemplateRepository, asegurándose de que regresó el contenido real que estaba esperando. ¿Esto es malo?
¿Sigue siendo una prueba de unidad válida? Las pruebas unitarias deben ser rápidas y simples, ¿no? Pero, sinceramente, no estoy muy seguro, una cosa es segura: me ayudó a pensar sobre la forma y el contenido de mis datos. El contenido en FakeRepository reflejará más o menos mi contenido de producción, aunque leyendo desde el sistema de archivos, en lugar de en la memoria.
Si, de hecho, lo que estoy haciendo son pruebas de integración, ¿cómo debería usar los simulacros para las pruebas de mi unidad?
No tiene sentido para mí (si utilizo Mocks) que configuro la expectativa para que llame al método y devuelva una cadena? ¿Me estoy perdiendo algo pero no veo mucho valor allí? ¡El código ni siquiera compilará si configuro un nombre de método inválido!
Realmente estoy muy confundido sobre el asunto y mi percepción de las pruebas unitarias es totalmente borrosa ahora con todos estos conceptos.
¿Alguien puede demostrar con un ejemplo súper súper simple de cómo las imitaciones y burlas caben en una suite? Por ejemplo, ¿qué debería ser una prueba unitaria? ¿Qué debería ser una prueba de integración?
Gracias
Bueno, darle a tu código lo que quiere no va a ser muy útil ya que probar en su forma más simple es, supongo, "ponerlo a prueba". –