unit-testing - create - unit testing visual studio 2015



Objetos falsos codificados contra el marco burlón (4)

Algunos distinguen entre simulacros y talones. Un objeto simulado puede verificar que ha sido interactuado de la manera esperada. Un marco de burla puede facilitar la generación de simulaciones y trozos.

En su ejemplo, ha apalabrado un único método en una interfaz. Considere una interfaz con n métodos, donde n puede cambiar con el tiempo. Una implementación cortada a mano puede requerir más código y más mantenimiento.

https://src-bin.com

Tengo curiosidad sobre qué método le gusta usar a la gente para burlarse y por qué . Los dos métodos que conozco están usando objetos falsos codificados y un marco burlón. Para demostrarlo, esbozaré un ejemplo usando C #.

Supongamos que tenemos una interfaz IEmployeeRepository con un método llamado GetEmployeeById.

public interface IEmployeeRepository
{
    Employee GetEmployeeById(long id);
}

Podemos crear fácilmente una burla de esto:

public class MockEmployeeRepository : IEmployeeRepository
{
    public Employee GetEmployeeById(long id)
    {
        Employee employee = new Employee();
        employee.FirstName = "First";
        employee.LastName = "Last";
        ...
        return employee;
    }
}

Luego, en nuestras pruebas podemos decirle explícitamente a nuestros servicios que utilicen el MockEmployeeRepository, ya sea utilizando un setter o una inyección de dependencia. Soy nuevo en los marcos de burla, así que tengo curiosidad de por qué los usamos, si podemos hacer lo anterior.


Answer #1

Eso no es un Simulacro, es un Trozo. Para el troquelado, su ejemplo es perfectamente aceptable.

De Martin Fowler:

A eso nos referimos con burlas: objetos preprogramados con expectativas que forman una especificación de las llamadas que se espera que reciban.

Cuando te estás burlando de algo, usualmente llamas un método de "Verificar".

Mire esto para la diferencia entre Mocks y Stubs http://martinfowler.com/articles/mocksArentStubs.html


Answer #2

Tiendo a escribir trozos y burlas a mano, primero. Entonces, si se puede expresar fácilmente usando un marco de objeto simulado, lo reescribo para que tenga menos código para mantener.


Answer #3

Una interfaz simulada puede tener diferentes salidas por prueba: una prueba puede tener un método return null, otra prueba tiene el método return an object, otra prueba tiene el método throw una excepción. Todo esto está configurado en la prueba unitaria, mientras que su versión requeriría varios objetos escritos a mano.

Psuedocode:

//Unit Test One

MockObject.Expect(m => m.GetData()).Return(null);

//Unit Test Two

MockObject.Expect(m => m.GetData()).Return(new MyClass());

//Unit Test Three

MockObject.Expect(m => m.GetData()).ThrowException();




mocking