如何使用moq模拟MySqlConnection

问题描述 投票:0回答:1

我正在尝试使用 Moq 来模拟

MySqlConnection
,它抛出以下错误:

System.NotSupportedException:“要模拟的类型 (MySqlConnection) 必须是接口、委托或非密封、非静态类。”

有没有办法在不更改我试图为其编写单元测试的代码的情况下模拟

MySqlConnection

c# mysql .net unit-testing moq
1个回答
0
投票

您可以创建一个内存数据库来模拟应用程序数据库上下文,并将测试数据添加到内存数据库中进行测试。

请参考以下代码。

// 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();
}
© www.soinside.com 2019 - 2024. All rights reserved.