【问题标题】:Nunit test Case issueNunit 测试用例问题
【发布时间】:2016-06-17 11:39:59
【问题描述】:

我打算为我的 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.);  
}

请让我知道如何模拟服务的响应。

【问题讨论】:

    标签: c# unit-testing nunit


    【解决方案1】:

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

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

    就我而言,Web->v4.0.0.0 中使用的版本 单元测试项目中使用的版本->4.0.0.1

    我在单元测试项目中安装了“v4.0.0.0”版本,它工作正常。

    【讨论】:

      【解决方案2】:

      这是一个如何获取视图名称的示例

      [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
      • _helper

      【讨论】:

      • 抱歉延迟响应,我尝试使用上面的代码,但 viewResult 仍然为空。你能帮我看看为什么会这样
      • 您有任何异常吗?当我复制您的测试示例并进行更改以给出答案时,我还注意到一个错字。在你的行动中,你将视图命名为SearchUsers,但在测试中你期待SearchUsersView。我将进行编辑以匹配原始操作中的内容。
      • 没有例外,我在尝试在控制器端调试时得到。不确定为什么 ViewResult 为空。ActionResult 以单行 'System.web.Mvc.ViewResult' 的形式出现。
      • actionResult 是否也在测试中 null
      • actionResult 不为 null,响应是 'System.Web.MVC.ViewResult' 作为单行而不是对象。
      猜你喜欢
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      相关资源
      最近更新 更多