[英]Moq - mocking multiple arguments
我尝试关闭Moq页面的一半链接已被破坏,包括其官方API文档的链接 。 所以我会问这里。
我已成功使用单个“catch all”参数,如下所示:
mockRepo.Setup(r => r.GetById(It.IsAny<int>())).Returns((int i) => mockCollection.Where(x => x.Id == i).Single());
但是我无法弄清楚如何使用多个参数实现相同的行为。
mockRepo.Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>())).Returns( ..... );
....
是我无法弄清楚的部分。
编辑以回应乔丹:
问题是如何表示3个参数而不只是一个。
怎么转:
(int i) => mockCollection.Where(x => x.Id == i)
成:
(int i), (string s), (int j) => mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == j)
它与单个参数几乎相同:
.Returns((int i, string s, int x) => mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == x));
或者使用返回的泛型变体:
.Returns<int, string, int>((i, s, x) => mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == x));
我想你需要的是:
mockRepo
.Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>()))
.Returns<int,string,int>((id, someProp, someOtherProp) =>
mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == x));
你是说你怎么写正确的lambda?
mockRepo.Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>()))
.Returns((int i, string s, int i2) => doSomething() );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.