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' 版本并且它有效。
我打算为我的 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' 版本并且它有效。