ran*_*ous 5 c# asp.net-mvc unit-testing automapper
这是我正在开发单元测试的方法的代码:
public ActionResult ItemsListing()
{
var itemsList = itemsRepository.GetItems(true);
if (itemsList.Count() > 0)
{
var itemsListVMs = Mapper.Map<IEnumerable<Item>, IEnumerable<itemsListingViewModel>>(itemsList);
return View(itemsListVMs);
}
else
{
return RedirectToAction("Home");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是映射配置文件中的代码:
public static class MappingConfig
{
public static void RegisterMaps()
{
Mapper.Initialize(config =>
{
config.CreateMap<Item, itemsListingViewModel>();
});
}
}
Run Code Online (Sandbox Code Playgroud)
而我在初始化映射Application_Start()
的事件Global.asax
如下:
MappingConfig.RegisterMaps();
Run Code Online (Sandbox Code Playgroud)
下面是我正在尝试运行的简单测试方法:
[TestMethod]
public void ItemsListing()
{
HomeController controller = new HomeController();
ViewResult result = controller.ItemsListing() as ViewResult;
Assert.IsNotNull(result);
}
Run Code Online (Sandbox Code Playgroud)
我只是运行应用程序时工作正常.但是当我尝试运行单元测试方法时,它会显示上面提到的错误消息.任何人都可以帮我解决这个问题吗?谢谢!
您需要创建/注册单元测试的映射以及Application_Start()
未执行的映射.它与IIS相关联,在单元测试期间未运行.您必须手动调用映射配置.
[TestClass]
public class HomeControllerTests {
[ClassInitialize]
public static void Init(TestContext context) {
MappingConfig.RegisterMaps();
}
[TestMethod]
public void ItemsListing() {
HomeController controller = new HomeController();
ViewResult result = controller.ItemsListing() as ViewResult;
Assert.IsNotNull(result);
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的测试中,映射配置是在用[ClassInitialize]
属性装饰的方法中完成的
ClassInitializeAttribute类 标识一种方法,该方法包含在测试类中的任何测试运行之前必须使用的代码,并分配测试类要使用的资源.