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ę 😉