Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟MVC控制器中的内在依赖性_C#_Model View Controller_Mocking_Tdd - Fatal编程技术网

C# 模拟MVC控制器中的内在依赖性

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" :

我不明白您将如何测试以下控制器之类的东西

你会如何模拟这个请求?在我看来,要模拟它,您需要将请求传递给该方法,但这是错误的。或者您需要将其注入控制器构造函数,但这似乎也是错误的

我完全明白这将如何与ISomethingService或ISomethingRepository一起工作,但对于内在的依赖性,我就是不明白

谢谢

    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,这看起来是一篇非常有用的文章,明天我会好好阅读它。谢谢