Dha*_*ngh 2 c# unit-testing dependency-injection xunit .net-core
我正在尝试对类中的一个方法进行单元测试,TWService并且需要两个依赖项来注入 ieIXMLResponseSave和IConfiguration. 我能够IXMLResponseSave在我的事实中注入依赖项以使用以下行。
services.AddTransient<IXMLResponseSave, XMLFileResponseSaveBlob>();
Run Code Online (Sandbox Code Playgroud)
我应该如何为 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();
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
为单元测试编写的代码。
[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);
}
Run Code Online (Sandbox Code Playgroud)
目前我收到以下错误消息:
尝试激活“”时无法解析“Microsoft.Extensions.Configuration.IConfiguration”类型的服务
cod*_*.sj 11
这是帮助您解决IConfiguration依赖关系的代码片段
services.AddTransient<IConfiguration>(sp =>
{
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("appsettings.json");
return configurationBuilder.Build();
});
Run Code Online (Sandbox Code Playgroud)
您必须包含以下 NuGet 包才能在 *Test 项目中运行上述代码:
ps 您不需要注入真实的对象来编写单元测试用例,而可以使用模拟对象。此外,IConfiguration您可以传递 POCO 类或 IOptions 接口,而不是传递接口。
| 归档时间: |
|
| 查看次数: |
3284 次 |
| 最近记录: |