Pregunta

He esta confusión todo el tiempo. Si escribo un código que utiliza el código falso afirmar alguna operación, ¿Cómo puedo confiar en mi verdadera aplicación cuando se inicia realmente el uso de los objetos reales en lugar de los falsos.

Por ejemplo, tengo este código -

    [Test]
    public void CanCreateContactsWithData()
    {
        using(ISession session = factory.OpenSession())
        using (ITransaction trans = session.BeginTransaction())
        {
            _contactId = (long) session.Save(contact);
            trans.Commit();
        }

        Assert.AreNotEqual(0, _contactId);
    }

Este código prueba la implementación de un "contacto" objeto ya sea que se guarda en la base de datos o no. Si se me ocurrió usar un talón en lugar de una conexión de base de datos real, hacer yo necesita tener prueba separada para su almacenamiento en la base de datos? Y, lo que ustedes llamada que como las pruebas de integración?

Las respuestas se sinceramente apreciados.

¿Fue útil?

Solución

Martin Fowler tiene una buena discusión aquí .

A partir de su artículo:

Meszaros utiliza el término de prueba dobles como término genérico para cualquier tipo de objeto de simulación utilizado en lugar de un objeto real para fines de prueba. El nombre proviene de la noción de un doble de acción en las películas. (Uno de sus objetivos era evitar el uso de cualquier nombre que ya se utilizó ampliamente.) Meszaros continuación, define cuatro tipos particulares de doble:

  • objetos mudos se pasa alrededor, pero nunca realmente utilizado. Por lo general, sólo son utilizadas para llenar las listas de parámetros.
  • objetos falsos en realidad tienen implementaciones de trabajo, pero por lo general toman algún atajo que los hace no es adecuado para la producción (una base de datos en la memoria es un buen ejemplo).
  • Talones proporcionan respuestas enlatadas a las llamadas realizadas durante la prueba, por lo general no responden en absoluto a nada fuera de lo que está programado en la prueba. Talones también pueden grabar información sobre las llamadas, como una puerta de enlace talón de correo electrónico que se acuerda de los mensajes es enviado ', o quizás sólo la cantidad de mensajes que 'envió'.
  • Mocks son lo que estamos hablando aquí: objetos pre-programado con las expectativas que forman una especificación de las llamadas que se espera recibir
  • .

De estos tipos de dobles, sólo se burla insisten en la verificación de comportamiento.

Otros consejos

Usted debe estar probando el código que haya escrito. Si escribió el código objeto de conexión de base de datos, y luego probarlo. De lo contrario, si es parte de una biblioteca con sus propias pruebas, sólo puede maqueta / ramal y asumir que si el objeto de conexión pasa a su propio banco de pruebas, entonces funciona.

Por ejemplo, yo no pondría a prueba las llamadas a métodos de hibernación, supongo que los desarrolladores de Hibernate han probado a fondo que ya. Pero I lo haría prueba que estaba llamando el método correcto, usando una maqueta para establecer esa expectativa.

Se utiliza talones cuando lo que desea es una función para volver algún valor (o no hace nada). En realidad, no importa si la función se llama o no, lo que desea aislar cosas.

Mocks son más poderosos, como también se puede realizar un seguimiento si la función se llama, ¿cuántas veces, e incluso hacer cosas con los valores de su función obtiene.

En su caso, si se quiere burlarse de la base de datos (por lo que se convierte en una prueba de unidad en lugar de una funcional), puede burlarse ISession y ITransaction. A continuación, puede almacenar estos valores en memoria, y comprobar si se guardan los valores correctos.

Sí, el uso de una base de datos real sería la prueba más funcional o integración, dependiendo de su definición. En lo personal, siento que las pruebas unitarias se supone que deben probar con exactitud que sólo método, en forma aislada de todo lo demás. Así que, independientemente de si la sesión o la transacción funciona o no, la prueba de unidad debe garantizar que esos objetos ser llamados a hacer su trabajo cuando y como sea necesario - que es donde se burla y talones vienen en usted. utilizarlos para asegurarse de que su unidad de prueba es tal como se desacopla de funcionalidad externa para que pueda ser probado como una unidad de base; Lo ideal sería que de todos modos.

La mayoría de los tipos de pruebas unitarias se refiere al análisis piezas individuales de código y talones y se burla son simplemente herramientas que le ayudan a prueba pieza por pieza. Por piezas de prueba individual es probable que pueda probar cada pieza con mayor detalle, pero no se le garantiza nada sobre el cuadro completo. Hay varios tipos de pruebas de integración van a hacer eso.

Al probar piezas más grandes de funcionalidad, a menudo encontrar pruebas de integración real de la lógica de base de datos para ser los artefactos de prueba menos valiosos, ya que a menudo se pondrá a prueba estas mismas operaciones a nivel de interfaz de usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top