【发布时间】:2014-06-07 14:32:06
【问题描述】:
我正在尝试使用 moq 在我的许可证类上模拟一个函数。
许可证类有如下接口:
Licence TryGetLicence(Predicate<Licence> filter);
在我的集成测试中,我使用 mef 来延迟加载对象。我的班级找到了 mef 加载的对象,需要检查是否有可用的许可证。对于我的测试,我创建了两个对象,其中一个可以被许可。我想使用 moq 只为这个对象返回一个许可证,为另一个返回 null,就像真正的类一样。我遇到的问题是起订量不喜欢我传入谓词。我不确定 moq 是否只是不以这种方式处理谓词,还是我只是执行此错误?
以下是我在测试中为上述接口设置最小起订量的代码行:
var lic = new Licence
{
LicId = Guid.Parse("53024D4E-3A01-4489-A341-753D04748EB9"),
LicName = "test",
Count = 1,
ExpiryDate = DateTime.Now.AddDays(2)
};
var mockAgent = new Mock<ILicenceAgent>();
mockAgent.Setup(x => x.TryGetLicence (y => y.LicId == lic.LicId)) Returns(lic);
这会构建,但是当最后一行被点击时,它会引发 Unsupported expression 异常。
对于我使用过的其他测试:
mockAgent.Setup(x => x. TryGetLicence (It.IsAny<Predicate<Licence>>())).Returns(lic);
我不能将它用于我的新测试,因为它会为我加载的两个对象返回一个有效的许可证。
最小起订量可以按照我尝试的方式使用吗?
【问题讨论】:
标签: c# visual-studio-2013 integration-testing moq mef