Я пытаюсь научиться выполнять модульное тестирование с помощью C# и 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;
}
}
Я хочу протестировать метод CalculateAge()
. Чтобы сделать это, я подумал, что должен попытаться задать значение по умолчанию для свойства DateOfBirth
, выполнив это в моем тестовом методе:
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());
Но когда дело доходит до утверждения, значение CalculateAge( )
равно 0, хотя DateOfBirth
равно new DateTime(1990, 3, 25)
.
Я знаю, что это может показаться глупым примером, но что бы там ни было... Я подумал, что могу использовать насмешки, чтобы присвоить значения еще не разработанным методам/свойствам в моих объектах, чтобы тестирование метода не зависело от на другом компоненте моего класса или даже на настройке контекста по умолчанию для моего объекта (отсюда и имя пользователя здесь...) Я неправильно подхожу к этой проблеме?
Спасибо.