C# 模拟MVC控制器中的内在依赖性
我不明白您将如何测试以下控制器之类的东西 你会如何模拟这个请求?在我看来,要模拟它,您需要将请求传递给该方法,但这是错误的。或者您需要将其注入控制器构造函数,但这似乎也是错误的 我完全明白这将如何与ISomethingService或ISomethingRepository一起工作,但对于内在的依赖性,我就是不明白 谢谢C# 模拟MVC控制器中的内在依赖性,c#,model-view-controller,mocking,tdd,C#,Model View Controller,Mocking,Tdd,我不明白您将如何测试以下控制器之类的东西 你会如何模拟这个请求?在我看来,要模拟它,您需要将请求传递给该方法,但这是错误的。或者您需要将其注入控制器构造函数,但这似乎也是错误的 我完全明白这将如何与ISomethingService或ISomethingRepository一起工作,但对于内在的依赖性,我就是不明白 谢谢 public ActionResult Test() { return View(Request.Browser.Crawler ? "A" :
public ActionResult Test()
{
return View(Request.Browser.Crawler ? "A" : "B");
}
您需要创建一个模拟http上下文。有多个库可以执行此操作,但您基本上需要执行以下操作:
var request = new HttpRequest("", "http://localhost/", "");
var writer = new StringWriter();
var response = new HttpResponse(writer);
var context = new HttpContext(request, response);
请求不是HttpContext,它是HttpRequestBase。一旦它被模拟,我该如何将其放入控制器中?我想这是我真正的问题。谢谢Zdravko,但该属性称为请求-例如var homeController=new homeController();var mockHttpRequestBase=MockRepository.GenerateMock();homeController.Request=mockHttpRequestBase;在这里,虽然请求属性没有setter,但它是只读的,在这里,接近结尾:谢谢Zdravko,这看起来是一篇非常有用的文章,明天我会好好阅读它。谢谢