EFCore – testy na bazie w pamięci

Gdy korzystamy z EFCore i chcemy uruchamiać testy na bazie w pamięci, możemy do naszych klas wstrzykiwać DbContext in memory:

    private DarwinDbContext GetDbContext()
    {
        var builder = new DbContextOptionsBuilder<MyDbContext>();
        builder.UseInMemoryDatabase("SthName");
        var options = builder.Options;
        return new MyDbContext(options);
    }

Teraz możemy wpaść w pułapkę, że zapisy wykonane w jednym teście, będą widoczne w innym. Można temu zaradzić na dwa sposoby.

1. Na koniec każdego testu wykonać:

dbContext.Database.EnsureDeleted();

2. Dla każdego testu zwracać odseparowaną bazę:

builder.UseInMemoryDatabase(Guid.NewGuid().ToString());

Do tematu testowania i baz danych jeszcze wrócę 😉