C# 如何模拟具有HtttpRequestBase参数的方法

C# 如何模拟具有HtttpRequestBase参数的方法,c#,mocking,moq,C#,Mocking,Moq,我有一个方法: public override someClass getX(HttpRequestBase request){ ... } 现在,我想嘲笑它 我试过了 mockProvider.Setup(x => x.getX(It.IsAny<HttpRequestWrapper>())).Returns(someClassInstance); mockProvider.Setup(x=>x.getX(It.IsAny())。返回(someClassInstance)

我有一个方法:

public override someClass getX(HttpRequestBase request){ ... }
现在,我想嘲笑它

我试过了

mockProvider.Setup(x => x.getX(It.IsAny<HttpRequestWrapper>())).Returns(someClassInstance);
mockProvider.Setup(x=>x.getX(It.IsAny())。返回(someClassInstance);
但它返回null,而不是someClassInstance(通过调试,我可以看到它不是null)。
我能做什么?谢谢

我不太明白您为什么期望结果为“2”,我也看不到
someClassInstance
的声明来验证断言是否应该为空

但是,我实现了这些方法,并围绕以下内容进行了测试:

using System.Web;

using Moq;

using NUnit.Framework;

public class FooBase
{
    public virtual ResultObject getX(HttpRequestBase request)
    {
        return new ResultObject { Id = 2 };
    }
}

public class Foo : FooBase
{
    public override ResultObject getX(HttpRequestBase request)
    {
        return new ResultObject { Id = 4 };
    }
}

public class ResultObject
{
    public int Id { get; set; }
}

[TestFixture]
public  class Test
{
    Mock<Foo> mockProvider = new Mock<Foo>();

    [Test]
    public void FooTest()
    {
        // Arrange
        var fakedResultObject = new ResultObject { Id = 8 };
        mockProvider.Setup(x => x.getX(It.IsAny<HttpRequestWrapper>())).Returns(fakedResultObject);

        // Act
        var result = mockProvider.Object.getX(new HttpRequestWrapper(new HttpRequest("filename", "http://foo.org", "querystring")));

        //Assert
        Assert.AreEqual(8, result.Id);
    }
}
使用System.Web;
使用最小起订量;
使用NUnit.Framework;
公共类食品库
{
公共虚拟结果对象getX(HttpRequestBase请求)
{
返回新的ResultObject{Id=2};
}
}
公共类Foo:FooBase
{
公共覆盖ResultObject getX(HttpRequestBase请求)
{
返回新的ResultObject{Id=4};
}
}
公共类结果对象
{
公共int Id{get;set;}
}
[测试夹具]
公开课考试
{
Mock mockProvider=new Mock();
[测试]
公共空间
{
//安排
var fakedResultObject=newresultobject{Id=8};
mockProvider.Setup(x=>x.getX(It.IsAny())。返回(fakedResultObject);
//表演
var result=mockProvider.Object.getX(新的HttpRequestWrapper(新的HttpRequest(“文件名”)http://foo.org“,“查询字符串”);
//断言
arest.AreEqual(8,result.Id);
}
}

您在
x.GetX(It.IsAny())
中有一个打字错误,它不应该是
x.GetX(It.IsAny())
GetX
返回
int
,因此默认情况下它返回0(不是
null
)。你确定这个方法有问题吗?@Elph,这个输入错误只在这里。我只是想把情况简化一下。但核心思想是:我能在其中插入什么呢case@Alexander,这不是重点。我将示例更改为类似于代码中的对象。请参见上文,也许这是另一个问题,再次询问以表示感谢