C# Xunit Mocking Db Context (For Testing)

So in my App I use Repositories like.

 public class CommentRepository 
        AppDBContext context;

        public List Comments { get { return this.context.Comments.ToList();  }  }
        public CommentRepository(AppDBContext context)
            this.context = context;

The AppDbContext inherits DbContext (part of Entity Framework).

Then in the startup.cs in the ConfigureServices method I add
services.AddDbContext(options => options.UseSqlServer(Configuration["ConnectionStrings:Local"]));

Ok ok... So on to testing.

In my xUnit testing project, with a reference to the main project I can then do a Mock Context and do a database in memory.

Full Example

public class ComplaintTests
        public AppDBContext Context { get; set; }
        public ComplaintRepository ComplaintRepo;
        public CommentRepository CommentRepo;

        public ComplaintTests()
            /* Create a Memory Database instead of using the SQL */
            var optionsBuilder = new DbContextOptionsBuilder()
                .UseInMemoryDatabase(databaseName: "temp")
            Context = new AppDBContext(optionsBuilder);
            ComplaintRepo = new ComplaintRepository( this.Context);
            CommentRepo = new CommentRepository( this.Context);
        public void TestTesting()
            //Test that testing is working
        public void AddComplaint()
            Complaint complaint = new Complaint() { ID = 1, 
            Contents = "Test Complaint", Completed = false, Create = DateTime.Now };
            bool success = ComplaintRepo.AddComplaint(complaint);
            // Cleanup

A great way to do testing!

More info at Microsoft C# Core In Memory Testing

Leave a Reply

Your email address will not be published. Required fields are marked *