天道酬勤,学无止境

Mapper not initialized , error with my unit test Core.Net 2.0

I have a WebApi done in Core.net 2.0, with UOW , and automapper. Everything is working fine, but now I want to implement Unit Test with Nunit, and I have this error of automapper

Message: System.InvalidOperationException : Mapper not initialized. Call Initialize with appropriate configuration. If you are trying to use mapper instances through a container or otherwise, make sure you do not have any calls to the static Mapper.Map methods, and if you're using ProjectTo or UseAsDataSource extension methods, make sure you pass in the appropriate IConfigurationProvider instance.

How can I solve this. Thanks in advance . Jolynice

Class AutoMapperProfile.cs

public class AutoMapperProfile : Profile
{
    public AutoMapperProfile()
    {
        CreateMap<Cars, CarsDTO>()
            .ReverseMap();
    }
}

class Startup.cs

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public void ConfigureServices(IServiceCollection services)
    {

        //removed configurations 

        // Add cors
        services.AddCors();

        // Add framework services.
        services.AddMvc();

        Mapper.Initialize(cfg =>
        {
            cfg.AddProfile<AutoMapperProfile>();
        });

        // Repositories
        services.AddScoped<IUnitOfWork, HttpUnitOfWork>();
        services.AddScoped<IAccountManager, AccountManager>();
    }
}

class carsController.cs

[Authorize]
[Route("api/[controller]")]
public class CarsController : Controller
{
private IUnitOfWork _unitOfWork;
readonly ILogger _logger;
private readonly IAccountManager _accountManager;

public CarsController(
    IUnitOfWork unitOfWork,
    ILogger<CarsController> logger, 
    IAccountManager accountManager)
{
    _unitOfWork = unitOfWork;
    _logger = logger;
    _accountManager = accountManager;
}


[HttpGet]
public IActionResult GetAll()
{
    var allCars = _unitOfWork.CarsRepository.GetAllCarsData();
    if (allCars == null)
    {
        return NotFound();
    }
    return Ok(Mapper.Map<IEnumerable<CarsDTO>>(allCars));
}

and this is my unit test

[TestFixture]
public class CarsControllerTest
{
#region private variables
List<Cars> cars = new List<Cars>();

CarsController _carsController = null;
IUnitOfWork _unitOfWork;
ICarsRepository _carsRepository;
#endregion


[SetUp]
public void SetUp()
{
    cars = new List<Cars>
    {
     new Cars
    {
        Alias = "406Moq",
        BrandId = 1,
        ModelId = 1,
        Plate = "00-00-01",
        AltranVehicle = 0,
        DefaultCar = 0,
        Active = 1,
        ColorId = 1
    }
    };
}


[Test]
public void GetAllCarsControllerTest()
{
    //Arrange
    _carsRepository = SetupCarsRepository();
    var unityOfWork = new Mock<IUnitOfWork>();
    var _logger = new Mock<ILogger<CarsController>>();
    var accountManager = new Mock<IAccountManager>();

    unityOfWork.SetupGet(c => c.CarsRepository).Returns(_carsRepository);
    _unitOfWork = unityOfWork.Object;

    _carsController = new CarsController(_unitOfWork, _logger.Object, accountManager.Object);


    //Act
    var carsResult = _carsController.GetAll();

    //Assert
    carsResult.StatusCode.Should().Be(HttpStatusCode.OK);
}

private ICarsRepository SetupCarsRepository()
{
    //initialize  repository
    var mockRepo = new Mock<ICarsRepository>(MockBehavior.Default);

    //Setup mocking behavior
    mockRepo.Setup(c => c.GetAllCarsData()).Returns(cars);

    return mockRepo.Object;
}

//Cleanup
[TearDown]
public void TearDown()
{
    cars = null;
}
}
}

评论

You are missing initialization of your mapper in your unit test. The following initializes the mapper in the CarsControllerTest class constructor.

[TestFixture]
public class CarsControllerTest
{
    public CarsControllerTest()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.AddProfile<AutoMapperProfile>();
        });
    }
}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Automapper - 映射器已初始化错误(Automapper - Mapper already initialized error)
    问题 我在我的 ASP.NET MVC 5 应用程序中使用 AutoMapper 6.2.0。 当我通过控制器调用我的视图时,它显示了所有的东西。 但是,当我刷新该视图时,Visual Studio 显示错误: System.InvalidOperationException: '映射器已经初始化。 您必须为每个应用程序域/进程调用一次 Initialize。 我只在一个控制器中使用 AutoMapper。 尚未在任何地方进行任何配置,也未在任何其他服务或控制器中使用 AutoMapper。 我的控制器: public class StudentsController : Controller { private DataContext db = new DataContext(); // GET: Students public ActionResult Index([Form] QueryOptions queryOptions) { var students = db.Students.Include(s => s.Father); AutoMapper.Mapper.Initialize(cfg => { cfg.CreateMap<Student, StudentViewModel>(); }); return View(new ResulList
  • 为 ASP .NET MVC 创建单元测试的问题(Problems in creating unit test for ASP .NET MVC)
    问题 我正在为我的 ASP .NET MVC 控制器类创建一些单元测试,但遇到了一些非常奇怪的错误: 我的控制器代码如下: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Delete(JournalViewModel journal) { var selectedJournal = Mapper.Map<JournalViewModel, Journal>(journal); var opStatus = _journalRepository.DeleteJournal(selectedJournal); if (!opStatus.Status) throw new System.Web.Http.HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); return RedirectToAction("Index"); } 我的测试代码如下: [TestMethod] public void Delete_Journal() { // Arrange // Simulate PDF file HttpPostedFileBase mockFile = Mock.Create<HttpPostedFileBase>()
  • 如何为使用 AutoMapper 和依赖注入的 .net core 2.0 服务编写 xUnit 测试? [关闭](How to Write xUnit Test for .net core 2.0 Service that uses AutoMapper and Dependency Injection? [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 3年前关闭。 改进这个问题 我是 .net core/C# 编程的新手(来自 Java) 我有以下服务类,它使用依赖注入来获取 AutoMapper 对象和数据存储库对象,用于创建 SubmissionCategoryViewModel 对象的集合: public class SubmissionCategoryService : ISubmissionCategoryService { private readonly IMapper _mapper; private readonly ISubmissionCategoryRepository _submissionCategoryRepository; public SubmissionCategoryService(IMapper mapper, ISubmissionCategoryRepository submissionCategoryRepository) { _mapper = mapper; _submissionCategoryRepository = submissionCategoryRepository; } public List
  • Problems in creating unit test for ASP .NET MVC
    I am creating some unit tests for my ASP .NET MVC Controller class and I ran into some very strange errors: My controller code is below: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Delete(JournalViewModel journal) { var selectedJournal = Mapper.Map<JournalViewModel, Journal>(journal); var opStatus = _journalRepository.DeleteJournal(selectedJournal); if (!opStatus.Status) throw new System.Web.Http.HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); return RedirectToAction("Index"); } My test code is below: [TestMethod] public void Delete_Journal() { // Arrange
  • How to Write xUnit Test for .net core 2.0 Service that uses AutoMapper and Dependency Injection? [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 3 years ago. Improve this question I'm new to .net core/C# programming (coming over from Java) I have the following Service class the that uses dependency injection to get an AutoMapper object and a data repository object for use in creating a collection of SubmissionCategoryViewModel objects: public class SubmissionCategoryService : ISubmissionCategoryService { private readonly IMapper _mapper
  • 当 Map 存在时 AutoMapper 抛出 Missing Map(AutoMapper throws Missing Map when Map exists)
    问题 规格: .NET 4.5.1 - MVC 5.2.2 - EF 6.0 - AutoMapper 3.2.1 我首先遇到代理对象错误,但能够通过执行以下操作来解决它:AutoMapper 3.1.1 和 Entity Framework 6.1 代理对象 修复该错误后,我立即收到以下错误消息: 出于某种原因,它说从 Pages 到 PagesViewModel 的映射不存在,即使它存在。 这是我的代码: 在Global.asax.cs 中: protected void Application_Start() { ConfigureAutomapper.Configure(); .... 在AutoMapper.cs(更新)中 public static class ConfigureAutomapper { public static void Configure() { ConfigurePublications(); ConfigureBlog(); ConfigureBasic(); ConfigureLists(); } public static void ConfigurePublications() { Mapper.Initialize(x => { x.AddProfile<PublicationsMappings>(); }); } public
  • Mockito Matchers isA,any,eq和same之间有什么区别?(What's the difference between Mockito Matchers isA, any, eq, and same?)
    问题 我对它们之间的区别以及在哪种情况下选择哪种区别感到困惑。 可能会有些明显的区别,例如any和eq ,但是为了确定我将它们全部包括在内。 我想知道它们之间的差异,因为遇到了这个问题:我在Controller类中有此POST方法 public Response doSomething(@ResponseBody Request request) { return someService.doSomething(request); } 并希望对该控制器执行单元测试。 我有两个版本。 第一个是简单的,像这样 @Test public void testDoSomething() { //initialize ObjectMapper mapper //initialize Request req and Response res when(someServiceMock.doSomething(req)).thenReturn(res); Response actualRes = someController.doSomething(req); assertThat(actualRes, is(res)); } 但是我想使用一种MockMvc方法,就像这样 @Test public void testDoSomething() { //initialize ObjectMapper
  • 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装
    【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装 1.1 BLOG文档结构图 1.2 前言部分1.2.1 导读和注意事项各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:① MySQL的二进制安装过程(重点)② MySQL多实例管理(mysqld_multi)③ MySQL的源码编译安装过程④ Linux的逻辑卷的使用⑤ 文件的MD5值⑥ 访问MySQL的几种客户端工具(Navicat和MySQLWorkbench)⑦ 修改MySQL的密码⑧ 设置MySQL的远程访问⑨ 设置MySQL的开机启动以及多实例的开机启动⑩ RPM、二进制和源码编译的优缺点 Tips:① 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)上有同步更新。② 文章中用到的所有代码、相关软件、相关资料及本文的pdf版本都请前往小麦苗的云盘下载,小麦苗的云盘地址见:http://blog.itpub.net/26736162/viewspace-1624453/。③ 若网页文章代码格式有错乱,请下载pdf格式的文档来阅读。④ 在本篇BLOG中
  • 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装
    【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装 1.1 BLOG文档结构图 1.2 前言部分1.2.1 导读和注意事项各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:① MySQL的二进制安装过程(重点)② MySQL多实例管理(mysqld_multi)③ MySQL的源码编译安装过程④ Linux的逻辑卷的使用⑤ 文件的MD5值⑥ 访问MySQL的几种客户端工具(Navicat和MySQLWorkbench)⑦ 修改MySQL的密码⑧ 设置MySQL的远程访问⑨ 设置MySQL的开机启动以及多实例的开机启动⑩ RPM、二进制和源码编译的优缺点 Tips:① 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)上有同步更新。② 文章中用到的所有代码、相关软件、相关资料及本文的pdf版本都请前往小麦苗的云盘下载,小麦苗的云盘地址见:http://blog.itpub.net/26736162/viewspace-1624453/。③ 若网页文章代码格式有错乱,请下载pdf格式的文档来阅读。④ 在本篇BLOG中
  • Mockito:模拟专用字段初始化(Mockito: Mock private field initialization)
    问题 如何模拟正在内联初始化的字段变量? class Test { private Person person = new Person(); ... public void testMethod() { person.someMethod(); ... } } 在这里,我想在测试Test.testMethod()方法时模拟person.someMethod() ,为此我需要模拟person变量的初始化。 有什么线索吗? 编辑:我不允许修改Person类。 回答1 Mockito带有一个帮助器类,可以为您节省一些反射样板代码: import org.mockito.internal.util.reflection.Whitebox; //... @Mock private Person mockedPerson; private Test underTest; // ... @Test public void testMethod() { Whitebox.setInternalState(underTest, "person", mockedPerson); // ... } 更新:不幸的是,Mockito团队决定删除Mockito 2中的类。因此,您将返回编写自己的反射样板代码,使用其他库(例如Apache Commons Lang)或简单地窃取Whitebox类
  • MyBatis-Plus学习笔记(一)
    文章目录 好处MyBatis-Plus的一般步骤:1.创建数据库2.创建一张User表3.编写项目4.初始化项目,导入相应的依赖5.数据库的连接和配置6.编写实体类7.写UserMapper接口,在mapper上面继承BaseMapper类8.添加注解9.单元测试错误解决结果 MyBatis-Plus:是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生 好处 可以节省大量的代码 使用第三方组件的一般步骤: 1.导入对应的依赖; 2,研究如何配置依赖 3.代码如何编写 4.提高扩展,扩展能力技术 MyBatis-Plus的一般步骤: 1.创建数据库 【mybatis_plus1】 2.创建一张User表 DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) ); 插入数据: DELETE FROM
  • AutoMapper throws Missing Map when Map exists
    Specifications: .NET 4.5.1 - MVC 5.2.2 - EF 6.0 - AutoMapper 3.2.1 I was first having Proxy object error but was able to solve it by doing the following: AutoMapper 3.1.1 and Entity Framework 6.1 Proxy objects Once I fixed that error, I instantly got the following error message: For some reason, it says the map from Pages to PagesViewModel doesn't exist, even though it does. Here is my code: In Global.asax.cs: protected void Application_Start() { ConfigureAutomapper.Configure(); .... In AutoMapper.cs (UPDATED) public static class ConfigureAutomapper { public static void Configure() {
  • Entity Framework Core系列教程-1
    Entity Framework Core 系列教程 翻译自: https://www.entityframeworktutorial.net/efcore/entity-framework-core.aspx Entity Framework Core简介 简介 Entity Framework Core(EF Core)是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。 EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。 EF Core是对象/关系映射(O / RM)框架。它是对ADO.NET的增强,它为开发人员提供了一种自动机制,用于访问和存储数据库中的数据。 EF Core在与.NET Core应用程序一起使用。但是,它也可以与基于标准.NET 4.5+框架的应用程序一起使用。 下图列出了EF Core支持的应用程序类型,.NET Framework和操作系统: EF Core版本历史记录 EF Core目前版本是3.1,是长期支持版,适合做项目开发。 发行版本目标框架支持截止时间EF Core 3.1NET Standard 2.02022 年 12 月 3 日 (LTS)EF Core 3.0.NET Standard 2
  • 浅谈之SpringBoot整合其他技术(Mybatis+SpringDataJPA+Junit+Redis)
    ~~ 在此之前,写过关于SpringBoot的IDEA快速部署,不会步骤的大家可以去看一哈,有问题的就留言。浅谈之SpringBoot的环境搭建及快速入门 QuQ Spring整合Mybatis 添加Mybatis的起步依赖添加数据库的驱动坐标创建user表创建实体Bean编写Mapper配置Mapper配置文件在application.properties中添加mybatis的信息测试:Controller pom.xml: <!-- mybatis起步依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--MySQL连接驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> 数据库连接信息:application.properties spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring
  • Automapper:成员列表(Automapper: List to members)
    问题 我想将抽象类型的任意列表映射到共享相同基类型的任意属性集。 这是一些 UnitTest 代码,它目前失败了,但我想成功。 你能帮我,得到一个通用的解决方案吗? 以下是课程: public class Source { public string Name { get; set; } = "SomeName"; public Dictionary<string, ValueType> SourceList { get; set; } = new Dictionary<string, ValueType>(); } public interface IDestination { string Name { get; set; } } public class Destination : IDestination //And many other classes like this, with other properties inherited from ValueType { public string Name { get; set; } public double DoubleValue { get; set; } public int IntValue { get; set; } public string SomeOtherProperty { get; set; }
  • 单元测试 RavenDB(Unit Testing RavenDB)
    问题 在我的单元测试中,我将每个测试设置为一个完全空的 IDocumentSession。 我这样做: [SetUp] public void SetUp() { _store = new EmbeddableDocumentStore { RunInMemory = true }; _store.Initialize(); Session = _store.OpenSession(); } 但我认为这可能是我的测试有点慢的原因。 我想知道是否有一个简单的命令可以从数据库中删除所有文档。 我想知道的是:如果我能做到这一点,以及它是否会提高性能。 回答1 这是使用 ravendb 进行单元测试的推荐方法 不推荐用于生产的基本上在内存模式下运行 如果您发现这很慢,请尝试分析并找出到底是什么使速度变慢 回答2 尝试使用RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true 。 var _store = new EmbeddableDocumentStore() { Configuration = { RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true, RunInMemory = true, } }; 回答3 代价高昂的调用是_store
  • SpringBoot(二)—— 集成MyBatis、单元测试及事务支持
    集成MyBatis 在SpringBoot(一)—— 项目构建及快速入门中,我们已经初步完成了SpringBoot的构建,这里我们来看看在SpringBoot中如何使用MyBatis,其实我们在介绍MyBatis时就曾详细介绍了MyBatis与Spring的集成,在SpringBoot中集成MyBatis也是非常的简单,首先我们需要引入相关的依赖,如下: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> 然后我们肯定需要连接数据库呀,所以我们还需要在application.properties文件中,添加我们连接数据库的必要信息,如下: spring.datasource.driverClassName=com.mysql.jdbc.Driver spring
  • Automapper 随机错误(Automapper Random Errors)
    问题 2个月前我问过这个问题! 问题仍然存在。 我不打算在这里复制/粘贴相同的问题,因为我发现错误不是针对特定的 Entity-DTO 映射,而是针对控制器中首先出现的任何 Entity-DTO。 我的意思是,如果程序流到达 Country-CountryDto,则错误显示: Missing type map configuration or unsupported mapping. Mapping types: Country -> CountryDTO MyApp.Domain.BoundedContext.Country -> MyApp.Application.BoundedContext.CountryDTO Destination path: List`1[0] Source value: MyApp.Domain.BoundedContext.Country 或者,如果有第一手的帐户检查,错误会显示: Missing type map configuration or unsupported mapping. Mapping types: Account -> AccountDTO MyApp.Domain.BoundedContext.Account -> MyApp.Application.BoundedContext.AccountDTO Destination
  • Mybatis 缓存实现原理——案例实践
    Mybatis 缓存介绍 关于缓存,想必大家早已不陌生。第一次使用查询数据时,Mybatis 将其结果缓存起来,当下次执行相同的查询的时候直接返回(没有声明需要刷新缓存,且缓存没有超时)。 默认情况下,Mybatis 只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 一级缓存(本地的会话缓存):只与 SqlSession 有关,不同的 SqlSession 缓存不同。 二级缓存:SqlSession 可以共享缓存。 缓存(总开关)是默认开启的,如果需要关闭缓存只需在 MyBatis 的配置文件中添加一个属性设置, 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 <settings> <setting name="cacheEnabled" value="false"/> </settings> 开启二级缓存的方式 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行: <cache/> 还可自定义缓存参数 <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> 创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。 可用的清除策略有
  • 为什么我需要在 Swift 中为 struct 编写初始化程序才能在单元测试中使用它?(Why do I need to write initializer for struct in Swift in order to use it in unit tests?)
    问题 我正在尝试使用公共结构 public struct Person { public let name: String } 在单元测试 (XCTest) 中: let person = Person(name: "Paul") 测试构建失败并出现错误: 'Person' 不能被构造,因为它没有可访问的初始值设定项。 为了构建测试,我需要为结构编写一个初始化程序。 感觉不对,因为结构已经有初始化程序。 有没有人有更好的解决方案? Xcode 版本 6.1.1 (6A2008a) 回答1 这在 Swift 2.0 中通过@testable属性@testable 。 如果您使用@testable将模块导入到测试中,则合成的初始值设定项将对您的测试可见。 您可以在此处找到@testable的简要介绍。 回答2 问题是你用结构体得到的自动合成初始化器被合成为internal ,这意味着它不能从另一个模块访问。 您的单元测试当前在另一个模块中运行,因此他们看不到初始化程序。 正如 Ben-G 在他的回答中指出的那样,从 Swift 2.0 开始使用@testable属性解决了这个@testable 。 这是 Swift 项目中单元测试的普遍缺陷的一部分。 单元测试模块应该对应用模块有特殊的访问权限,否则你必须添加大量的访问控制包。 从文档: