.net webapi+autofac+autoMapper 单元测试

Posted 飞天猪皮怪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net webapi+autofac+autoMapper 单元测试相关的知识,希望对你有一定的参考价值。

介绍

上一篇:https://www.cnblogs.com/aqgy12138/p/13283646.html

上一篇创建项目的时候,附带创建了一个单元测试,那么这篇博客就用单元测试来测试一下。

github:https://github.com/QQ2287991080/AutofacSolution

为什么写一下这个呢,因为我在网上是真没找到类似的,那我就只能壮壮胆子自己写一下,希望海涵。

  先安装nuget包,Autofac、AutoMapper ,添加WEBAPI.Autofac.AutoMapper.Demo的引用。

首先测试的步骤是一样的,首先还是要创建autofac容器,那在单元测试的时候如何注册呢。

我的想法是放在测试类的构造函数里,同时私有化一个IContainer类型的,这个类型就是容器创建后返回的类型,

在容器builder的时候就赋值给它,那么我在测试类的全局就能使用容器中的东西。

至于如何拿到IMapper我想的是,既然我AutoMapper的在构造函数初始化的时候已经放在容器里了,那我在测试方法中

去容器中解析服务拿到IMapper作为MapperController的参数。

手残画了个图,希望有用。

那么接下来就写测试代码。

先看看之前MapperController的Get方法,是没有改动的。

 测试代码如下

 

using Autofac;
using AutoMapper;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http.Results;
using WEBAPI.Autofac.AutoMapper.Demo.Controllers;
using WEBAPI.Autofac.AutoMapper.Demo.Models;
using WEBAPI.Autofac.AutoMapper.Demo.Profiles;

namespace WEBAPI.Autofac.AutoMapper.Demo.Tests.Controllers
{
    [TestClass]
    public class MapperTest
    {
        readonly IContainer _container;
        public MapperTest()
        {
            //初始化容器
            var builder = new ContainerBuilder();
            builder.Register<IMapper>(r =>
            {
                var mapperConfiguration = new MapperConfiguration(c =>
                {
                    c.AddProfile(new TestProfile());//注册的Profile类。
                });
                mapperConfiguration.AssertConfigurationIsValid();
                return new Mapper(mapperConfiguration);
            });
            _container = builder.Build();
        }
        [TestMethod]
        public void autofac_automapper_mappercontroller_test()
        {
            //从容器中解析IMapper
            var mapper = _container.Resolve<IMapper>();
            //向控制器传参
            var controller = new MapperController(mapper);
            //执行get方法
            var result = controller.Get();
            //因为返回的是Json,那么需要把结果的进行转换,如果不用JsonResult只会得到null
            var json = result as JsonResult<TestModelDto>;
            //转换成功后的内容就是TestModelDto
            Console.WriteLine("姓名:"+json.Content.Name);
            Console.WriteLine("年龄:"+json.Content.Age);
            Assert.IsNotNull(result);
        }
    }
}

然后用测试资源管理器测试一下

 

 

 

 测试成功,为了更加清晰一点,我调试一下测试。

 

 GifCam这个录制gif的录不了多久。。。

 

 

以上是关于.net webapi+autofac+autoMapper 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

autofac + owin + webform + mvc + webapi集成demo

Autofac 同时支持MVC 与Webapi

c# autofac结合WebApi的使用

WebApi中的Autofac

AutoFac实现WebAPI依赖注入(EF以及Mysql)

WebAPI2使用AutoFac依赖注入完整解决方案。