xUnit
を使用してコントローラーをテストしようとしていますが、カスタマーコントローラーの実行中に次のエラーが発生します。
「次のコンストラクタパラメータに一致するフィクスチャデータがありませんでした:CustomerController customerController」
テストクラス
public class UnitTest1
{
CustomerController _customerController;
public UnitTest1(CustomerController customerController)
{
_customerController = customerController;
}
[Fact]
public void PostTestSuccessful()
{
Guid guid = Guid.NewGuid();
CustomerViewModel model = new CustomerViewModel()
{
Id = guid,
Name = "testName",
Email = "test email",
PhoneNumber = "test phone",
Address = "test address",
City = "test city",
Gender = "Male"
};
var actionResult = _customerController.Post(model);
Assert.NotNull(actionResult);
Assert.IsType<Task<IActionResult>>(actionResult);
Assert.True(actionResult.IsCompletedSuccessfully);
}
CustomerControllerクラス
[Route("customers")]
public class CustomerController : ControllerBase
{
private readonly ILogger _logger;
private readonly ICustomerService _customerService;
public CustomerController(ILogger<CustomerController> logger,
ICustomerService customerService)
{
_logger = logger;
_customerService = customerService;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] CustomerViewModel viewModel)
{
var customerToBeSaved = viewModel.Adapt<CustomerServiceModel>();
var customer = await _customerService.SaveAsync(customerToBeSaved);
var result = customer.Adapt<CustomerViewModel>();
return Ok(result);
}
テストフレームワークの場合、テストクラスのDIを介してモックオブジェクトを注入するモックライブラリが必要です。 Nmock、Moq、またはその他のモックライブラリを使用して、コンストラクタインジェクションをセットアップできます。
https://www.c-sharpcorner.com/uploadfile/john_charles/mocking-in-net-with-moq/
この記事では、.NET Core ASP.Netでxunitを非常にうまく機能させる方法を示します。実際にスタートアップを置き換えて、コントローラーが同じプロセスで実行されるようにし、ローカルであるかのようにテストできます。
https://docs.Microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.2
モックフレームワークを使用したくない場合は、コンストラクタでCustomerControllerを新しくします。