wake-up-neo.com

Die folgenden Konstruktorparameter hatten keine übereinstimmenden Fixture-Daten

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);
    }
3
MePengusta

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/

http://nmock.sourceforge.net/quickstart.html

3
Gaurav Jalan

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

2
Bluebaron

Legen Sie einfach CustomerController im Konstruktor an, wenn Sie kein Mocking-Framework verwenden möchten.

1
user9410863