How to mock the controller context with moq

后端 未结 2 1269
清歌不尽
清歌不尽 2021-01-18 09:14

I am trying out the MOQ framework and up now I have hit a barrier. The following unit test fails because the actual value of the ViewName property is an empty string.

2条回答
  •  暖寄归人
    2021-01-18 10:02

    This is because you're making assumptions about how the MVC framework works. If you're relying on the conventions to locate the view, the framework actually leaves the ViewName property as String.Empty until ExecuteResult() is called.

    You can see this code on line 68 of ViewResultBase.ExecuteResult within the MVC source:

    if (String.IsNullOrEmpty(ViewName)) {
       ViewName = context.RouteData.GetRequiredString("action");
    }
    

    Furthermore, you should be careful about what you're testing. As a rule of thumb, you should focus on testing the code you write, not the framework's code. Testing to make sure the view name by convention is resolved correctly is really a unit test for the framework itself, not an application built on it.

    If you're looking for a good way to employ mocking in MVC, you may want to look at testing your routes (which sort of looks like what you're trying to do here). You can find a post by Phil Haack concerning just this subject to get you started.

提交回复
热议问题