2017-08-08 22 views
1

SetupGetForm工作,但Count不起作用。如何解决Count返回预期的值?从Moq请求计数文件

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); 
+0

它不工作,因为你设置了错误的模拟 – Nkosi

回答

1

它不工作,因为你设置了错误的模拟。在请求模拟中应用设置。

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); 

只是为了证明上述工程,我测试它像这样

var context = httpContextMock.Object; 

Assert.AreEqual(2, context.Request.Files.Count); 

和它的工作。

0

我做了一个快速测试,它工作,如果你通过模拟上下文访问请求。

[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); 
    } 

但是,正如Nkosi建议的那样,您可能想要在requestMock本身上设置Files.Count。