我正在尝试学习如何使用 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)
。
我知道这可能看起来像一个愚蠢的例子,但无论如何......我想我可以使用模拟来为我的对象中尚未开发的方法/属性赋予值,因此方法的测试不会依赖于另一个组件我的班级,甚至为我的对象设置默认上下文(因此这里的用户名......)我是否以错误的方式处理这个问题?
谢谢。