繁体   English   中英

Moq - 嘲笑多个论点

[英]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() );

请参阅Mark Seeman对此问题的回答:

在Moq Callback()调用中设置变量值

它可能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM