Модульное тестирование метода с помощью Moq

Я пытаюсь научиться выполнять модульное тестирование с помощью 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).

Я знаю, что это может показаться глупым примером, но что бы там ни было... Я подумал, что могу использовать насмешки, чтобы присвоить значения еще не разработанным методам/свойствам в моих объектах, чтобы тестирование метода не зависело от на другом компоненте моего класса или даже на настройке контекста по умолчанию для моего объекта (отсюда и имя пользователя здесь...) Я неправильно подхожу к этой проблеме?

Спасибо.

18
задан Filburt 25 May 2012 в 19:22
поделиться