Я пытаюсь научиться делать модульное тестирование с помощью С# и 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)
.
Я знаю, что это может показаться глупым примером, но что угодно... Я думал, что могу использовать насмешку, чтобы придать значения еще не разработанному методу/свойствам в моих объектах, поэтому тестирование метода не будет зависеть на другой компонент моего класса или даже настроить контекст по умолчанию для моего объекта (отсюда и имя пользователя здесь...) Я приближаюсь к этой проблеме неправильным образом?
Спасибо.