简体   繁体   中英

unite testing in .net core 2.0 with Dependency Injection

I have controller with DI approach.want to test each action of controller using unit testing. **Controller **

  public SearchController(ILookupSearch lookupSearch, IFullSearch fullSearch, IEmpUow uow, ILogger<SearchController> logger, TelemetryClient telemetryClient, IHostingEnvironment hostingEnvironment, IOptions<ConnectionStringsConfig> connectionString, IOptions<AppSettingsConfig> options)
    {
        this.LookupSearch = lookupSearch;
        this.FullSearch = fullSearch;
        this.EmpUow = uow;
        this.logger = logger;
        this.hostingEnvironment = hostingEnvironment;
        this.connectionString = connectionString.Value;
        this.appSettings = options.Value;
        this.telemetryClient = telemetryClient;
    }


    [Route("Test")]
        [ActionName("Test")]
        [HttpGet]
        public IActionResult Test()
        {
if(this.appsettings.enableDummyData){
            return this.SearchEmpData(new EmpIdQueryField() { Country = "Sweden", EMPID = 441150 });
           }
        }

call goes to controller but all dependencies values in constructor are null.

Unit test case

   public async void Test1()
    {

        //Arrange

        Mock<IHostingEnvironment> hostingEnvironment = new Mock<IHostingEnvironment>();
        TelemetryClient telemetryClient = new TelemetryClient();
        Mock<ILogger<SearchController>> logger = new Mock<ILogger<SearchController>>();
        Mock<AppSettingsConfig> appSettings = new Mock<AppSettingsConfig>();

        Mock<IOptions<ConnectionStringsConfig>> connectionString = new Mock<IOptions<ConnectionStringsConfig>>();
        Mock<IOptions<AppSettingsConfig>> options = new Mock<IOptions<AppSettingsConfig>>();

        Mock<ILookupSearch> lookupSearch = new Mock<ILookupSearch>();
        Mock<IFullSearch> fullSearch = new Mock<IFullSearch>();
        Mock<IOneSoeUow> EmpUow = new Mock<IEmpUow>();

        //Act
        SearchController search = new SearchController(lookupSearch.Object, fullSearch.Object, oneSoeUow.Object, logger.Object, telemetryClient, hostingEnvironment.Object, connectionString.Object, options.Object);
        search.Test();

In your Test action you are consuming appsettings property, you need to setup appsettings instance in mock object,

    Mock<IOptions<AppSettingsConfig>> options = new Mock<IOptions<AppSettingsConfig>>();
    options.Setup(e=>e.appsettings).Returns(new Appsettings(){ enableDummyData = true });

It will mock enableDummyData to true,

Likewise, you need to setup all other properties of dependencies which you are consuming in this action or in other actions

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM