Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Unit Testing With Entity Framework and Entity Framework Core 2.1

DZone's Guide to

Unit Testing With Entity Framework and Entity Framework Core 2.1

Learn how to write unit tests for data access for use with the In-Memory Database setting in Entity Framework Core 2.1.

· DevOps Zone ·
Free Resource

Rapidly provision TLS certificates from any certificate authority within your DevOps CI/CD pipeline. Speed up deployments with automated TLS certificate provisioning using your existing DevOps toolchain.

Entity Framework Core 2.1 comes with a nifty little feature: an In-Memory Database setting. What this means, is that with a single option setting, your tests can interact directly with the database (or at least EF's impression of the database) but not actually touch any physical database. In other words, you can write unit tests for data access; an example:

// Arrange
DbContextOptions<ApplicationDbContext> options = new DbContextOptionsBuilder<ApplicationDbContext>()
    .UseInMemoryDatabase(Guid.NewGuid().ToString())
    .EnableSensitiveDataLogging()                
    .Options;

using (var context = new ApplicationDbContext(options))
{
    context.Database.EnsureDeleted();
ResourceCategory resourceCategory = new ResourceCategory()
    {
        Name = "TestCategory"
    }
};

// Act
_applicationDbContext.ResourceCategories.Add(resourceCategory);
_applicationDbContext.SaveChanges();


// Assert                
Assert.Equal("TestCategory", context.ResourceCategories.First().Name);               

To just quickly explain what this is doing: we have a DbContext called ApplicationDbContext and we're building a set of options on top of that context. We're then instantiating the context and cleaning the in memory database. Finally, we're adding a new piece of data to the context and then asserting that it has been added.

Told you it was nifty.

But what about if you're still using Entity Framework 6?

Glad you asked.

Out of the box, EF does not come with this kind of functionality; however, I recently came across (and contributed) to a NuGet library that provides just such a facility. It provides a wrapper for both Moq and Nsubstitute. The GitHub Repo is here.

Rapidly provision TLS certificates from any certificate authority within your DevOps CI/CD pipeline. Speed up deployments with automated TLS certificate provisioning using your existing DevOps toolchain.

Topics:
devops ,unit testing ,entity framework ,entity framework core ,tutorial

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}