【发布时间】:2012-06-01 08:59:48
【问题描述】:
我正在尝试学习如何使用 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)。
我知道这可能看起来像一个愚蠢的例子,但无论如何......我想我可以使用模拟来为我的对象中尚未开发的方法/属性赋予值,因此方法的测试不会依赖在我的类的另一个组件上,甚至为我的对象设置默认上下文(因此这里是用户的名称......)我是否以错误的方式处理这个问题?
谢谢。
【问题讨论】:
-
真的与您的问题平行的好文章:kakimotonline.com/2011/01/02/…
标签: c# unit-testing moq