如何解决使用Moq模拟复杂的通用方法
我有以下界面
public interface Itf {
bool M();
bool Method<T>(Expression<Func<T,bool>> x);
}
我不知道如何模拟方法Method(使用Moq)
var mck = new Mock<Itf>();
mck.Setup(o => o.M()).Callback(() => { }); //Ok
mck.Setup(o => o.Method(???)).Callback(x => {...}); //What should I replace ??? with?
期望的行为
我想要实现的是每当调用Method时都调用我的回调。这就是我尝试过的:
mck.Setup(o => o.Method(It.IsAny<Expression<Func<DocumentCollectionModel,bool>>>()))).Callback<Expression<Func<DocumentCollectionModel,bool>>>(x => {...}); //OK
mck.Setup(o => o.Method(It.IsAny<Expression<Func<It.IsAnyType,bool>>>()))).Callback<Expression<Func<It.IsAnyType,bool>>>(x => {...}); //Callack not called
mck.Setup(o => o.Method(It.IsAny<Expression<Func<It.IsSubtype<object>,bool>>>()))).Callback<Expression<Func<It.IsSubtype<object>,bool>>>(x => {...}); //Callack not called
虽然第一个示例可行,但如果可能的话,我希望将其通用,例如第二个或第三个示例,否则我必须为每种特定类型重复该模拟。
解决方法
您必须在测试方法中指定类型T。
假设T是字符串,这应该可以工作(在XUnit中):
mck.Setup(o => o.Method(It.IsAny<Expression<Func<string,bool>>>()))
.Callback<Expression<Func<string,bool>>>(x => {...});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。