mercredi 23 octobre 2019

DataService in Test env always return null when fetching InMemoryDb data

public class TestStartup : Startup
{
    private readonly Mock<ICarService> _carServiceMock;
    public TestStartup(IConfiguration configuration) : base(configuration)
    {
        _carServiceMock = new Mock<ICarService>();
    }

    public override void ConfigureMyServices(IServiceCollection services)
    {
        services.AddSingleton(_carServiceMock.Object);
    }

    public override void ConfigureDatabase(IServiceCollection services)
    {
        services.AddDbContext<CarContext>(options => options.UseInMemoryDatabase("CarDb"));
        services.AddTransient<DataSeed>();
    }   
}

public class TestFixture: IDisposable, ICollectionFixture<TestFixture>
{
    public TestFixture()
    {
         _server = new TestServer(new WebHostBuilder()
            .UseStartup<TestStartup>()
            .UseEnvironment("Development"));
          _client = _server.CreateClient();
    }
}

Inside Controller I'm using ICarService which is using CarContext to retrieve data from the Db.

public class CarController
{
    private readonly ICarService _carService;

    public CarController(ICarService carService)
    {
        _carService = carService;            
    }

    [HttpGet]
    public async Task<IActionResult> Get([FromRoute] int id)
    {
        var contact = await _carService.GetAsync(id); **// this is always null**
    }
}

My question is: Since this is an integration test, do I need to mock ICarService in the first place and if so, what I'm doing wrong here?

Aucun commentaire:

Enregistrer un commentaire