Sto cercando di imparare come eseguire il test dell'unità con C# e Moq e ho creato una piccola situazione di test. Dato questo codice:Unità di prova di un metodo 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;
}
}
Voglio testare il metodo CalculateAge()
. Per fare questo, ho pensato di provare a dare un valore predefinito alla proprietà DateOfBirth
facendo questo nel mio metodo di prova:
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());
Ma quando si tratta di l'affermazione, il valore di CalculateAge()
è uguale a 0, anche se DateOfBirth
eguali new DateTime(1990, 3, 25)
.
So che questo può sembrare un esempio stupido, ma qualunque cosa ... Ho pensato che potrei usare il mocking per dare valori a metodi/proprietà non ancora sviluppati nei miei oggetti, quindi il test di un metodo non sarebbe dipende da un altro componente della mia classe, o anche impostando un contesto predefinito per il mio oggetto (da qui il nome dell'utente qui ...) Sto affrontando questo problema nel modo sbagliato?
Grazie.
* Davvero * bel articolo che si allinea in parallelo con la tua domanda: http://kakimotonline.com/2011/01/02/unit-testing-net-application-with-moq-framework/ – atconway