我的类中有一组私有方法,我需要根据输入值动态调用一个.调用代码和目标方法都在同一个实例中.代码如下所示:
MethodInfo dynMethod = this.GetType().GetMethod("Draw_" + itemType);
dynMethod.Invoke(this, new object[] { methodParams });
Run Code Online (Sandbox Code Playgroud)
在这种情况下,GetMethod()不会返回私有方法.什么BindingFlags我需要提供以GetMethod()使其能找到私有方法?
我正在尝试编写一个Web API方法的测试,该方法使用HttpContext.Current.Request.Files并经过详尽的搜索和实验后,我无法弄清楚如何模拟它.正在测试的方法如下所示:
[HttpPost]
public HttpResponseMessage Post()
{
var requestFiles = HttpContext.Current.Request.Files;
var file = requestFiles.Get(0);
//do some other stuff...
}
Run Code Online (Sandbox Code Playgroud)
如果我试图模拟上下文,我会遇到Http*对象层次结构的问题.假设我设置了各种模拟对象(使用Moq),如下所示:
var mockFiles = new Mock<HttpFileCollectionBase>();
mockFiles.Setup(s => s.Count).Returns(1);
var mockFile = new Mock<HttpPostedFileBase>();
mockFile.Setup(s => s.InputStream).Returns(new MemoryStream());
mockFiles.Setup(s => s.Get(It.IsAny<int>())).Returns(mockFile.Object);
var mockRequest = new Mock<HttpRequestBase>();
mockRequest.Setup(s => s.Files).Returns(mockFiles.Object);
var mockContext = new Mock<HttpContextBase>();
mockContext.Setup(s => s.Request).Returns(mockRequest.Object);
Run Code Online (Sandbox Code Playgroud)
试图将其分配给当前上下文...
HttpContext.Current = mockContext.Object;
Run Code Online (Sandbox Code Playgroud)
...导致编译器错误/红线,因为它Cannot convert source type 'System.Web.HttpContextBase' to target …