Nunit 测试用例问题

Nunit test Case issue

我打算为我的 MVC 控制器编写单元测试用例。

我正在使用 NUnit 框架。

这是我的控制器方法:

public async Task<ActionResult> SearchView()
{
    List<Role> allRoles = (await _nmClient.GetDataAsync<IEnumerable<Role>>(Session, "/UserSvc/v1/Roles?skip=0&take=" + Constants.MaxSearchRowNumber)).ToList();
    model.Roles=_helper.GetAvailableRoles(Session.Contents["Session"], allRoles, true);
    List<LicenseType> allLicenseTypes = (await _Client.GetPlatformDataAsync<IEnumerable<LicenseType>>(Session, "/UserSvc/v1/Types?skip=0&take=" + Constants.MaxSearchRowNumber)).ToList();
    model.TypesJson = Newtonsoft.Json.JsonConvert.SerializeObject(allLicenseTypes);

    return View("SearchUsers", model);          
}

我首先尝试验证视图名称,但我在从操作结果中获取视图名称时遇到了问题。

这是我的测试方法:

[Test]
public void TestSearchUserView() 
{ 
    string expected= "SearchUserView"; 
    PlatformUserController controller = new PlatformUserController(); 
    var result= controller.SearchUserView() as Task<ActionResult>; 
            
    //Assert.AreEqual("SearchUserView", result.);  
}

请告诉我如何模拟服务的响应。

下面是如何获取视图名称的示例

[TestMethod]
public async Task TestSearchUserView() {
    //Arrange
    string expected = "SearchUsers";
    var controller = new PlatformUserController();

    //Act
    var actionResult = await controller.SearchUserView();

    //Assert
    Assert.IsNotNull(actionResult);
    var viewResult = actionResult as ViewResult;
    Assert.IsNotNull(viewResult);
    Assert.AreEqual(expected, viewResult.ViewName);  
} 

您需要修改控制器以允许注入依赖项。 使用可注入接口,您可以使用像 Moq 这样的模拟框架来为您的控制器生成模拟。

根据您的示例,以下是可以注入控制器的依赖项的良好候选者

  • _nmsPlatformClient
  • _帮手

我解决了这个问题,这是因为在单元测试项目和 Web 项目中使用了不同版本的 System.Web.MVC 参考。

请确保 'System.Web.MVC' 单元测试项目和 Web 项目中引用的 dll 应该相同。

以我为例,Web中使用的版本->v4.0.0.0 单元测试项目中使用的版本->4.0.0.1

我在单元测试项目中安装了 'v4.0.0.0' 版本并且它有效。