C# 使用Moq对请求中的文件进行计数

C# 使用Moq对请求中的文件进行计数,c#,asp.net-mvc,unit-testing,moq,C#,Asp.net Mvc,Unit Testing,Moq,表单的SetupGet有效,但计数无效。如何解决Count返回预期值的问题 var httpContextMock = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); httpContextMock.SetupGet(x => x.Request).Returns(request.Object); httpContextMock.SetupGet

表单的
SetupGet
有效,但
计数无效。如何解决
Count
返回预期值的问题

var httpContextMock = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();

httpContextMock.SetupGet(x => x.Request).Returns(request.Object);            
httpContextMock.SetupGet(x => x.Request.Form).Returns(form);
httpContextMock.SetupGet(x => x.Request.Files.Count).Returns(2);
var httpContextMock=new Mock();
var request=newmock();
httpContextMock.SetupGet(x=>x.Request).Returns(Request.Object);
httpContextMock.SetupGet(x=>x.Request.Form).Returns(Form);
httpContextMock.SetupGet(x=>x.Request.Files.Count);

它不起作用,因为您设置了错误的模拟。在请求模拟上应用设置

var httpContextMock = new Mock<HttpContextBase>();

var requestMock = new Mock<HttpRequestBase>();
requestMock.Setup(_ => _.Form).Returns(form);
requestMock.Setup(_ => _.Files.Count).Returns(2);

httpContextMock.Setup(_ => _.Request).Returns(requestMock.Object);

它成功了。

我做了一个快速测试,如果您通过模拟上下文访问请求,它就会成功

    [Test()]
    public void Test()
    {
        var httpContextMock = new Mock<HttpContextBase>();
        var request = new Mock<HttpRequestBase>();

        httpContextMock.SetupGet(x => x.Request).Returns(request.Object);
        httpContextMock.SetupGet(x => x.Request.Files.Count).Returns(2);

        var count = httpContextMock.Object.Request.Files.Count;
        Assert.AreEqual(2, count);
    }
[Test()]
公开无效测试()
{
var httpContextMock=new Mock();
var request=newmock();
httpContextMock.SetupGet(x=>x.Request).Returns(Request.Object);
httpContextMock.SetupGet(x=>x.Request.Files.Count);
var count=httpContextMock.Object.Request.Files.count;
断言。等于(2,计数);
}

但是,正如Nkosi所建议的,您可能想要设置文件。请依靠requestMock本身。

它不起作用,因为您设置了错误的mock
    [Test()]
    public void Test()
    {
        var httpContextMock = new Mock<HttpContextBase>();
        var request = new Mock<HttpRequestBase>();

        httpContextMock.SetupGet(x => x.Request).Returns(request.Object);
        httpContextMock.SetupGet(x => x.Request.Files.Count).Returns(2);

        var count = httpContextMock.Object.Request.Files.Count;
        Assert.AreEqual(2, count);
    }