Testing with EF Core
Real DB
[TestMethod]
public void CanInsertSamuraiIntoDatabase()
{
using var context = new SamuraiContext();
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
var samurai = new Samurai {Name = "Test"};
context.Samurais.Add(samurai);
context.SaveChanges();
Assert.AreNotEqual(0, samurai.Id);
}
InMemory Provider
It emulates an RDBMS via in-memory lists. It’s quite simple though, it does not support things such as raw SQL.
[TestMethod]
public void CanInsertSamuraiIntoDatabaseWithInMemoryDB()
{
var builder = new DbContextOptionsBuilder<SamuraiContext>();
builder.UseInMemoryDatabase("CanInsertSamurai");
using var context = new SamuraiContext(builder.Options);
var samurai = new Samurai {Name = "Test"};
context.Samurais.Add(samurai);
Assert.AreEqual(EntityState.Added, context.Entry(samurai).State);
}
When configuring in-memory database, we need to provide a name for it. This way, we can use the same in-memory DB from multiple testse (or different ones, with different names).