Din*_*esh 6 c# asp.net-mvc unit-testing mocking automapper
我正在尝试为我现有的MVC Web应用程序编写单元测试.因为我在automapper(IMapper)中遇到一些问题每当使用map函数时它返回null值.
我的控制器代码:
public class UserAdministrationController : BaseController
{
private readonly iUserService _userService;
private readonly IMapper _mapper;
public NewsController(iUserService userService, IMapper mapper)
{
_userService = userService;
_mapper = mapper;
}
public ActionResult Create(int CompanyID == 0)
{
UserDetail data = _userService(CompanyID);
var Modeldata = _mapper.Map<UserDetailViewModel, UserDetail>(data);
return View(Modeldata);
}
}
Run Code Online (Sandbox Code Playgroud)
模拟映射代码:
public class MappingDataTest : CommonTestData
{
public Mock<IMapper> MappingData()
{
var mappingService = new Mock<IMapper>();
UserDetailViewModel interview = getUserDetailViewModel(); // get value of UserDetailViewModel
UserDetail im = getUserDetail(); // get value of UserDetails
mappingService.Setup(m => m.Map<UserDetail, UserDetailViewModel>(im)).Returns(interview);
mappingService.Setup(m => m.Map<UserDetailViewModel, UserDetail>(interview)).Returns(im);
return mappingService;
}
}
Run Code Online (Sandbox Code Playgroud)
模拟代码:
[TestClass]
public class UserAdminControllerTest
{
private MappingDataTest _common;
[TestInitialize]
public void TestCommonData()
{
_common = new MappingDataTest();
}
[TestMethod]
public void UserCreate()
{
//Arrange
UserAdministrationController controller = new UserAdministrationController(_common.mockUserService().Object, _common.MappingData().Object);
controller.ControllerContext = _common.GetUserIdentity(controller);
// Act
ViewResult newResult = controller.Create() as ViewResult;
// Assert
Assert.IsNotNull(newResult);
}
}
Run Code Online (Sandbox Code Playgroud)
Mapper无法始终显示null控制器中的值.请帮助我.提前致谢.
我建议不要嘲笑AutoMapper.一个控制器单元测试没有多少价值,这类似于模拟JSON序列化器.只需使用真实的东西.
小智 6
您应该尝试以下操作:
public class MappingDataTest : CommonTestData
{
public Mock<IMapper> MappingData()
{
var mappingService = new Mock<IMapper>();
UserDetail im = getUserDetail(); // get value of UserDetails
mappingService.Setup(m => m.Map<UserDetail, UserDetailViewModel>(It.IsAny<UserDetail>())).Returns(interview); // mapping data
mappingService.Setup(m => m.Map<UserDetailViewModel, UserDetail>(It.IsAny<UserDetailtViewModel>())).Returns(im); // mapping data
return mappingService;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,您的模拟期望 UserDetailViewModel 面试 = getUserDetailViewModel(); 的确切实例。设置此映射,这就是它返回 null 的原因。Null 它将期待对 UserDetailViewModel 的任何引用,对于任何对 UserDetailtViewModel 的引用,它将返回预期的映射实例。