Si tuviera que escribir una biblioteca burlona, ¿cómo funcionaría esto (en otras palabras, ¿cómo "funcionan?)?¿Cómo funcionan los frameworks simulados?
Una de las cosas que me pregunto es que siempre está estableciendo expectativas, así que realmente necesita para comparar la expectativa con lo que hace el método en tiempo de ejecución, así que supongo que se requiere reflexión (resolver tipos en tiempo de ejecución)
Además, cuando se utiliza el término "objeto simulado", ¿se rompe el objeto o sería un objeto con expectativas preestablecidas?
Cuando pienso en cómo escribiría mi propia implementación de un framework/técnica, como objetos simulados, me doy cuenta de cuánto sé realmente (o no saber) y en qué me tropezaría: si el objeto simulado está preprogramado para devolver las expectativas establecidas y no llama al objeto real real, ¿no sería el resultado siempre el mismo? Por ejemplo:
[TestMethod, Isolated]
public void FakeReturnValueByMethodArgs()
{
var fake = Isolate.Fake.Instance<ClassToIsolate>();
// MethodReturnInt will return 10 when called with arguments 3, "abc"
Isolate.WhenCalled(()=> fake.MethodReturnInt(3, " abc")).WithExactArguments().WillReturn(10);
// MethodReturnInt will return 50 when called with arguments 3, "xyz"
Isolate.WhenCalled(()=> fake.MethodReturnInt(3, "xyz")).WithExactArguments().WillReturn(50);
Assert.AreEqual(10, fake.MethodReturnInt(3, "abc"));
Assert.AreEqual(50, fake.MethodReturnInt(3, "xyz"));
}
¿No esto siempre de vuelta verdad?
Gracias. ¿Puedes explicar cómo el código que proporcioné prueba el marco burlón y el código real (tal vez soy un poco lento)? – dotnetdev
Gracias por eso. Puede que tenga un método que se basa en una determinada fecha/hora para realizar una acción, pero ¿qué sucede si mi método realmente devuelve la hora actual (la esencia del método es algo que generalmente se burla)? ¿Cómo pruebo esto? Si un método hace algo a las 12 a. M., Pruebo el "algo" que hace, pero ¿qué ocurre si mi método devuelve el tiempo? ¿Cómo lo pruebo? – dotnetdev
@dotnetdev - Eche un vistazo a esta pregunta ASÍ: http://stackoverflow.com/questions/565289/unit-testing-code-that-does-date-processing-based-on-todays-date/565314#565314 Efectivamente necesitas romper la dependencia de DateTime en tu código –