在抽象方法的覆盖上使用moq?

时间:2015-11-04 21:39:54

标签: c# moq

我有这个基类

public abstract class Third : IThird
{
    public abstract ThirdUser GetUserDetails(HttpRequestBase request);
}

和这个派生类

public class LiProvider : Third
{
    public override ThirdUser GetUserDetails(HttpRequestBase request) { }
}

我试着像这样覆盖Moq:

mockLiProvider.Setup(x => x.GetUserDetails(It.IsAny<HttpRequestWrapper>())).Returns(user);

但它返回null,而不是user中的Setup

user肯定会在此测试中初始化。

我怎么嘲笑这个?

1 个答案:

答案 0 :(得分:2)

不应该

mockLiProvider.Setup(x => x.GetUserDetails(It.IsAny<HttpRequestBase>())).Returns(user);

而不是

mockLiProvider.Setup(x => x.GetUserDetails(It.IsAny<HttpRequestWrapper>())).Returns(user);#

请注意It.IsAny<>中的不同类型,我使用的是HttpRequestBase而不是HttpRequestWrapper

您的示例并未显示如何调用它。

我写了这个简单的测试,就像这样:

mockLiProvider.Object
.GetUserDetails(new HttpRequestWrapper(new HttpRequest("a.txt","http://a.com","")));

并且它适用于您的版本(HttpRequestWrapper)。 但是,如果您提供了HttpRequestBase的其他衍生产品,则It.IsAny可能与该类型不匹配。