Как добавить «Microsoft.Extensions.Configuration.IConfiguration» с помощью метода AddTransient в XUnit - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь выполнить модульное тестирование метода, который входит в класс TWService и требует две зависимости для внедрения, т.е. IXMLResponseSave и IConfiguration.Я могу ввести зависимость для IXMLResponseSave, используя строку ниже в моем Fact.

services.AddTransient<IXMLResponseSave, XMLFileResponseSaveBlob>();  

Как мне ввести зависимость для IConfiguration.

Ниже приведен мой пример кода контроллера, который яхочу проверить.

[Route("api/[controller]")]
[AllowAnonymous]
[ApiController]
public class TWBookingController : ControllerBase
{

    private readonly ITWService _twservice;

    public TWBookingController(ITWService tWService)
    {
        _twservice = tWService;
    }      

    public IActionResult SomeTestAction([FromBody]SomeParameter someParameter)
    {

        if(someParameter !=null && ValidatePassenger(someParameter) && (someParameter.pnrRequired>0 || someParameter.quotesrRequired > 0))
        {
            var result = _twservice.SomeTestMethod(someParameter);
            return Ok(result);
        }
        else
            return BadRequest();
    }      
}

public class TWService : ITWService
{
    private IConfiguration _config;   
    private IXMLResponseSave _xMLResponseSave;
    private string format = "Mddyyyyhhmmss";

    public TWService(IConfiguration config, IXMLResponseSave xMLResponseSave)
    {
        _config = config;
        _xMLResponseSave = xMLResponseSave;
    }

    public TWAutoSearchRes SomeTestMethod(SomeParameter someParameter)
    {
        //Some Implementation

    }
}

Код, написанный для модульного теста.

[Fact]
public void Test_Valid()
{
    someParameter_Valid = BuildValidRequest();
    var services = new ServiceCollection();
    services.AddTransient<ITWService, TWService>();           
    services.AddTransient<IXMLResponseSave, XMLFileResponseSaveBlob>();            
    var serviceProvider = services.BuildServiceProvider();
    _tWService = serviceProvider.GetService<ITWService>();
    var response = _tWService.SomeTestMethod(someParameter_Valid);
    Assert.IsType<OkResult>(response);
}

В настоящее время я получаю сообщение об ошибке ниже:

Не удается разрешить службу для типа «Microsoft.Extensions.Configuration.IConfiguration» при попытке активировать «

».

1 Ответ

2 голосов
/ 17 июня 2019

Вот фрагмент кода, который поможет вам разрешить IConfiguration зависимость

services.AddTransient<IConfiguration>(sp =>
        {
            IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
            configurationBuilder.AddJsonFile("appsettings.json");
            return configurationBuilder.Build();
        });

Вы должны включить следующие пакеты NuGet для запуска вышеуказанного кода в * тестовом проекте:

  1. Microsoft.Extensions.Configuration
  2. Microsoft.Extensions.Configuration.Json

ps Вам не нужно вводить реальные объекты для написания примеров модульных тестов, скорее вы могли бы использоватьМакет объектов.Кроме того, вместо передачи интерфейса IConfiguration вы можете передать класс POCO или интерфейс IOptions.

...