gpt4 book ai didi

c# - 如何在 XUnit 中使用 AddTransient 方法注入(inject) 'Microsoft.Extensions.Configuration.IConfiguration'

转载 作者:行者123 更新时间:2023-12-05 08:31:40 24 4
gpt4 key购买 nike

我正在尝试对类 TWService 中的方法进行单元测试,并且需要两个依赖项才能注入(inject),即 IXMLResponseSaveIConfiguration。我可以在我的 Fact 中使用以下行为 IXMLResponseSave 注入(inject)依赖项。

services.AddTransient<IXMLResponseSave, XMLFileResponseSaveBlob>();  

我应该如何为 IConfiguration 注入(inject)依赖。

下面是我要测试的示例 Controller 代码。

[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);
}

目前我收到以下错误消息:

Unable to resolve service for type 'Microsoft.Extensions.Configuration.IConfiguration' while attempting to activate ''

最佳答案

这是帮助您解决 IConfiguration 依赖性的代码片段

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

您必须包含以下 NuGet 包才能在 *Test 项目中运行上述代码:

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

附注您不需要注入(inject)真实对象来编写单元测试用例,而是可以使用模拟对象。此外,您可以传递 POCO 类或 IOptions 接口(interface),而不是传递 IConfiguration 接口(interface)。

关于c# - 如何在 XUnit 中使用 AddTransient 方法注入(inject) 'Microsoft.Extensions.Configuration.IConfiguration',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56628322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com