我试图看看Moq是否是我想在新项目中使用的东西,因为我使用的其他模拟框架正在挑战恕我直言.例如,我有一个方法:
IEnumerable<PickList> GetPickLists();
Run Code Online (Sandbox Code Playgroud)
我不确定我该怎么嘲笑这个...我尝试过类似的东西,但是我得到了恭维错误(我知道以下的Returns()不正确,但是无法弄清楚什么放在Return体中:
var mockCrm = new Mock<ICrmProvider>();
mockCrm.Setup<IEnumerable<PickList>>(foo => foo.GetPickLists())
.Returns<IEnumerable<PickList>>({});
Run Code Online (Sandbox Code Playgroud)
此外,尝试模拟这两种方法:
CustomerSyncResult ApplyActions(IEnumerable<CustomerAction> actions);
IEnumerable<Customer> GetCustomers(IEnumerable<string> crmIDs, IEnumerable<string> emails);
Run Code Online (Sandbox Code Playgroud)
我知道我在问一个笼罩的问题,但是我有一段时间开始.下载中的CHM没有足够的样本供我使用,其中一些教程似乎使用过时的方法,也没有覆盖枚举,这对我来说很棘手:(
任何提示将非常感谢.
Tru*_*ill 12
尝试
mockCrm.Setup(x => x.GetPickLists())
.Returns(new List<PickList>());
Run Code Online (Sandbox Code Playgroud)
该快速入门是一个很好的参考.
其他方法的一些示例:
mockCrm.Setup(x => x.ApplyActions(It.IsAny<IEnumerable>()))
.Returns(new CustomerSyncResult());
mockCrm.Setup(x => x.GetCustomers(It.IsAny<IEnumerable>(),
It.IsAny<IEnumerable>()))
.Returns(new List<Customers>());
Run Code Online (Sandbox Code Playgroud)
另外,在原始界面中创建IEnumerable泛型以提高类型安全性.
您还可以使用新的Moq v4功能规范:
var list = new List<PickList> { new PickList() };
ICrmProvider crm =
Mock.Of<ICrmProvider>(
x =>
x.GetPickLists() == list);
Run Code Online (Sandbox Code Playgroud)
目前还没有详细记录.请注意,您不再需要写mock.Object.一些链接:
确切的语法(使用It.Is,列表的内容等)将取决于您要完成的任务.It.IsAny将匹配任何参数,这将使处理序列或集合参数时更容易.
| 归档时间: |
|
| 查看次数: |
6072 次 |
| 最近记录: |