web-dev-qa-db-fra.com

Les paramètres de constructeur suivants n'avaient pas de données de correspondance correspondantes

J'essaie de tester mes contrôleurs à l'aide de xUnit, mais l'erreur suivante s'affiche lors de l'exécution de Customer Controller:

"Les paramètres de constructeur suivants n'avaient pas de fixture correspondante Data: CustomerController customerController"

Classe de test  

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

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

Pour la structure de test, vous avez besoin de la bibliothèque moqueuse pour injecter un objet fictif via DI dans vos classes de test. Vous pouvez utiliser Nmock, Moq ou toute autre bibliothèque moqueuse pour configurer l'injection de constructeur.

https://www.c-sharpcorner.com/uploadfile/john_charles/mocking-in-net-with-moq/

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

3
Gaurav Jalan

Ajoutez CustomerController au constructeur, si vous ne souhaitez utiliser aucun framework moqueur.

1
user9410863