C# Unit test a Repository class using a Seeded InMemoryDatabase
If you wanted to unit test a Repository that uses a DbContext with seeded data, you can use the InMemoryDatabase.
You will need to add NuGet “Microsoft.EntityFrameworkCore.InMemory”
I will use a base class to initialise the seeded DbContext, looks somethign like below
public class BaseRepositoryTests
{
protected readonly MyDbContext context;
public BaseRepositoryTests()
{
var dbContextOptions = new DbContextOptionsBuilder<MyDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString());
context = new MainContext(dbContextOptions.Options);
context.Category.AddRange(.....);
context.SaveChanges();
}
}
Then you can use the “BaseRepositoryTests” on your test class like below
public class CategoryRepositoryTests : BaseRepositoryTests
{
private ICategoryRepository _repository;
public CategoryRepositoryTests()
{
_repository= new CategoryRepository(context);
}
[Fact]
public async Task ShouldReturnNull()
{
var sc = await _repository.GetByIdAsync(-1);
Assert.Null(sc);
}
}
That is it.
