【发布时间】:2014-02-28 17:40:23
【问题描述】:
有没有办法使用 Moq 来存根方法?我看到不少标题相似的问题,但没有一个真正回答了我的问题。这是给我的一个单元测试示例,我发现使用 Moq 进行测试非常困难。我想做的是对 EmailTasks.UserIsValidForNotice() 方法进行单元测试:
public class User
{
public DateTime JoinDate { get; set; }
public bool Active { get; set; }
}
public class EmailTasks
{
IUserRepository repo;
public EmailTasks(IUserRepository repo)
{
this.repo = repo;
}
public IList<User> UserIsValidForNotice(DateTime minDate)
{
return repo.FindAll(u => u.Active && u.JoinDate > minDate);
}
}
public interface IUserRepository
{
IList<User> FindAll(Func<User, bool> q);
}
我可以像下面这样设置一个存根,然后轻松地测试查询,但我无法使用 Moq 做到这一点,因为我无法访问 Mocks Return 函数中的方法参数。
public class StubRepo : IUserRepository
{
public IList<User> PersonList { get; set; }
public IList<User> FindAll(Func<User, bool> q)
{
return PersonList.Where(q).ToList();
}
}
我知道这可能不是最好的设计,但我只是想知道这是否可以使用 Moq 来完成。
【问题讨论】:
标签: c# unit-testing moq