Я пытаюсь научиться выполнять тестирование модулей с помощью C# и Moq, и я создал небольшую тестовую ситуацию. С учетом этого кода:Единичное тестирование метода с помощью 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)
.
Я знаю, что это может показаться глупым примером, но все же ... Я думал, что могу использовать насмешку, чтобы придать ценности еще не разработанному методу/свойствам в моих объектах, поэтому тестирование метода не будет зависит от другого компонента моего класса или даже настраивает контекст по умолчанию для моего объекта (отсюда и имя пользователя здесь ...) Я не ошибаюсь в этой проблеме?
Спасибо.
* Действительно * хорошая статья, которая выравнивается параллельно с вашим вопросом: http://kakimotonline.com/2011/01/02/unit-testing-net-application-with-moq-framework/ – atconway