Estoy tratando de aprender a hacer pruebas unitarias con C# y Moq, y he construido una pequeña situación de prueba. Dado este código:Unidad probando un método con Moq
public interface IUser
{
int CalculateAge();
DateTime DateOfBirth { get; set; }
string Name { get; set; }
}
public class User : IUser
{
public DateTime DateOfBirth { get; set; }
string Name { get; set; }
public int CalculateAge()
{
return DateTime.Now.Year - DateOfBirth.Year;
}
}
Quiero probar el método CalculateAge()
. Para ello, pensé que debería tratar de darle un valor por defecto a la propiedad DateOfBirth
al hacer esto en mi método de prueba:
var userMock = new Mock<IUser>();
userMock.SetupProperty(u => u.DateOfBirth, new DateTime(1990, 3, 25)); //Is this supposed to give a default value for the property DateOfBirth ?
Assert.AreEqual(22, userMock.Object.CalculateAge());
Pero cuando se trata de la afirmación, el valor de CalculateAge()
es igual a 0, aunque DateOfBirth
iguales new DateTime(1990, 3, 25)
.
Sé que esto puede parecer un ejemplo tonto, pero lo que sea ... Pensé que podría usar la burla para dar valores a los métodos/propiedades aún no desarrollados en mis objetos, por lo que la prueba de un método no lo haría Depender de otro componente de mi clase, o incluso configurar un contexto predeterminado para mi objeto (de ahí el nombre del usuario aquí ...) ¿Me estoy acercando a este problema de la manera incorrecta?
Gracias.
* Realmente * buen artículo que se alinea en paralelo con su pregunta: http://kakimotonline.com/2011/01/02/unit-testing-net-application-with-moq-framework/ – atconway