简体   繁体   中英

How to mock MySqlConnection using moq

I am trying to mock MySqlConnection using Moq. and it is throwing the below error

System.NotSupportedException: 'Type to mock (MySqlConnection) must be an interface, a delegate, or a non-sealed, non-static class.'

Is there any way to mock the MySqlConnection without changing the code I am trying to write the unit test for?

You can create an in memory database to mock the application database context and add test data to the in memory db for testing.

Please refer the below code.

// Create in memory database

private readonly ApplicationDbContext _dbContext;

// In the constructor
public ClassConstructor()
{
     dbContext = CreateInMemoryDatabase("InMemory_DB");
     SetupMockData();
 }

private static ApplicationDbContext CreateInMemoryDatabase(string databaseName)
{
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
               .UseInMemoryDatabase(databaseName: $"{databaseName}_{Guid.NewGuid()}")
               .ConfigureWarnings(x => x.Ignore(InMemoryEventId.TransactionIgnoredWarning))
               .Options;
            var context = new ApplicationDbContext(options);
            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();
            return context;
}

// Add the mock data
private void SetupMockData()
{
    _dbContext.AddAsync(new Entity
    {
        Id = 1,
        Name = "Name"
     });

    _dbContext.SaveChanges();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM