Bueno, tiene algunas cosas que debe resolver. Tienes dos cosas básicas que necesitarás saber: nomenclatura y mejores prácticas.
En primer lugar quiero darle un gran recurso de vídeo desde una gran probador, Roy Osherove:
Este podcast ayudará a cabo inmensamente: http://www.hanselminutes.com/default.aspx?showID=187
Voy a parafrasear el podcast, aunque (que es música de la introducción Hanselminutes terrible):
Básicamente todo Hing lo haces con un framework de aislamiento (como Moq, Rhino Mocks, Type Mock, etc.) se llama falso.
Un falsa es un objeto en uso durante una prueba de que el código que está probando puede llamar en lugar del código de producción. Una falsificación se utiliza para aislar el código que está tratando de probar desde otras partes de su aplicación .
Hay (principalmente) dos tipos de falsificaciones: talones de y burla.
Un simulacro es una falsificación que se pone en lugar para que el código que está probando puede llamar a él y afirmar que la llamada fue hecha con los correctos parámetros . El ejemplo siguiente hace justamente esto usando el aislamiento Moq marco:
[TestMethod]
public void CalculateTax_ValidTaxRate_DALCallIsCorrect()
{
//Arrange
Mock<ITaxRateDataAccess> taxDALMock = new Mock<ITaxRateDataAccess>();
taxDALMock.Setup(taxDAL => taxDAL.GetTaxRateForZipCode("75001"))
.Returns(0.08).Verifiable();
TaxCalculator calc = new TaxCalculator(taxDALMock.Object);
//Act
decimal result = calc.CalculateTax("75001", 100.00);
//Assert
taxDALMock.VerifyAll();
}
Un talón de es casi lo mismo que un simulacro de , salvo que se pone en su lugar para asegurarse de que el código que está probando recupera datos consistentes de su llamada (por ejemplo, si su código llama a una capa de acceso a datos, un stub sería devuelve datos falsos), pero no lo hace afirmar contra el mismo stub. Que es, no importa verificar que el método llamó a su capa de acceso de datos falso - está intentando probar algo más. Proporcione el código auxiliar para obtener el método que está tratando de probar para trabajar de forma aislada.
He aquí un ejemplo con un talón:
[TestMethod]
public void CalculateTax_ValidTaxRate_TaxValueIsCorrect()
{
//Arrange
Mock<ITaxRateDataAccess> taxDALStub = new Mock<ITaxRateDataAccess>();
taxDALStub.Setup(taxDAL => taxDAL.GetTaxRateForZipCode("75001"))
.Returns(0.08);
TaxCalculator calc = new TaxCalculator(taxDALStub.Object);
//Act
decimal result = calc.CalculateTax("75001", 100.00);
//Assert
Assert.AreEqual(result, 8.00);
}
Note aquí que estamos probando la salida del método, en lugar de la hecho de que el método realiza una llamada a otro recurso.
Moq realmente no hace una distinción entre el API una maqueta y un talón (nótese que ambos fueron declarados como Mock<T>
), pero el uso aquí es importante en la determinación del tipo.
Espero que esto ayude a enderezarlo.
Ayende (creador de Rhino Mocks) anunció recientemente que va a deshacerse de la Mock vs Stub y simplemente hacer que todo sea falso en la próxima versión de Rhino Mocks. Algunos podrían argumentar que obtienes más conocimiento sabiendo que algo es un Stub en lugar de un Mock, pero eso se está volviendo un poco quisquilloso. Si no te importa, simplemente usa Mocks todo el tiempo y no afirmes sus suposiciones. Te ahorrará un dolor de cabeza tener que descubrir cuál usar. –
Muy buena explicación Anderson. No estoy familiarizado con falsificaciones o falsificación, pero estoy familiarizado con Mocking y Stubs. La nomenclatura falsa viene de donde? –
@Anderson Imes Lo siento, no fui más explícito. Entiendo tu descripción y es bastante suficiente. Lo que quiero decir es a quién se le ocurrió la nomenclatura de "falsificaciones". Nunca lo he visto mencionado en este contexto antes y todo lo que he leído siempre ha sido Mocks vs Stubs. También me suscribí al blog de Ayende, pero nunca lo he visto mencionar Mocks/Stubs and Fakes en la misma oración. –