Yo ahora pruebas que se parecen a lo siguiente:Cómo utilizar moq para probar código que llama ayudantes protegidos
// In Blah.cs
public class ClassUnderTest
{
public bool MethodUnderTest()
{
// Do a bunch of stuff...
return HelperMethod();
}
protected virtual bool HelperMethod()
{
bool success = false;
// Proprietary Hardware Access.
// Database Calls.
// File System Modifications.
return success;
}
}
// In TestBlah.cs
public class TestStub : ClassUnderTest
{
public bool HelperMethodReturnValue;
protected override bool HelperMethod()
{
return HelperMethodReturnValue;
}
}
[TestClass]
public class TestingClass
{
[TestMethod]
public void ClassUnderTest_MethodUnderTest_TestHelperReturnsTrue()
{
var stub = new TestStub();
stub.HelperMethodReturnValue = true;
Assert.IsTrue(stub.MethodUnderTest());
}
[TestMethod]
public void ClassUnderTest_MethodUnderTest_TestHelperReturnsFalse()
{
var stub = new TestStub();
stub.HelperMethodReturnValue = false;
Assert.IsFalse(stub.MethodUnderTest());
}
}
Lo anterior se ve muy bien para cosas simples, sin embargo, la clase stub obtiene exponencialmente más grande y más compleja rápidamente . Me gustaría reemplazar la clase de stub con Moq. Sin embargo, esto no se compilará porque, por alguna razón, no puedo establecer un valor de retorno en un método protegido.
[TestMethod]
public void ClassUnderTest_MethodUnderTest_TestHelperReturnsFalse()
{
var mockClass = new Mock<ClassUnderTest>();
mockClass.Protected().Setup("HelperMethod").Returns(false);
Assert.IsFalse(mockClass.Object.MethodUnderTest());
}
¿Alguien sabe cómo voy a hacer esto? ¿Puedo hacer esto con moq?
Algo no parece correcto aquí ... no se burla de su SUT, se burla de sus dependencias. –
Sí, en realidad Yojin se burla del SUT para reemplazar una parte del SUT que debe mantenerse separada, no en un método de ayuda protegido. – Matthias