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).