【发布时间】:2010-12-13 19:29:08
【问题描述】:
过去一周左右我一直在使用 Moq,直到今天还没有遇到任何问题。我无法让 VerifyAll() 正确匹配我的模拟设置。
我目前正在为我的应用程序 API 编写单元测试。以下是应用程序的结构:
API <==> Service <==> DAO <==> Database
考虑到这一点,我正在模拟服务对象,然后使用模拟服务构造一个 API 对象。到目前为止,我已经编写了许多单元测试没有问题。
我有两个这样的实例变量:
private Api _api;
private Mock<IHibernateService> mockService;
我在设置方法中初始化这些:
[SetUp]
public void DoSetupTasks()
{
mockService = new Mock<IHibernateService>();
_api = new Api(mockService.Object);
}
这是失败的单元测试:
[Test]
public void TestSearchOnAllProperties()
{
mockService
.Setup(service => service.LoadAll(It.IsAny<Type>()))
.Returns(new DomainBase[0]);
var dmbs = _api.SearchOnAllProperties("search term", typeof(DomainBase));
mockService.VerifyAll();
}
API 的SearchOnAllProperties() 方法随后将调用服务的LoadAll() 方法(当然还有一些额外的逻辑),所以我想验证它是否被正确调用。澄清一下,这是LoadAll() 在SearchOnAllProperties() 中的调用方式:
public IEnumerable<DomainBase> SearchOnAllProperties(string searchTerm, Type type)
{
foreach (DomainBase dmb in _hibernateService.LoadAll(type))
{
// additional logic
}
}
但是,当我运行单元测试时,我收到一个MockVerificationException,指出给定的设置不匹配。我不知道为什么它应该调用服务的LoadAll() 方法。
【问题讨论】:
标签: c# .net unit-testing nunit moq