Ich versuche, meine Controller mit xUnit
zu testen, erhalte jedoch während der Ausführung des Kundencontrollers den folgenden Fehler:
"Die folgenden Konstruktorparameter hatten kein übereinstimmendes Fixture Data: CustomerController customerController"
Testklasse
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-Klasse
[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);
}
Für das Testframework benötigen Sie die Mocking-Bibliothek, um ein Mock-Objekt über DI in Ihre Testklassen einzufügen. Sie können Nmock, Moq oder eine andere Mocking-Bibliothek verwenden, um die Konstruktorinjektion einzurichten.
https://www.c-sharpcorner.com/uploadfile/john_charles/mocking-in-net-with-moq/
Dieser Artikel zeigt, wie man xunit wirklich gut mit .Net Core ASP.Net zum Laufen bringt. Tatsächlich wird der Startvorgang ersetzt, sodass Ihre Controller im selben Prozess ausgeführt werden und Sie sie testen können, als wären sie lokal.
https://docs.Microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.2
Legen Sie einfach CustomerController im Konstruktor an, wenn Sie kein Mocking-Framework verwenden möchten.