我正在尝试使用 Moq 来模拟
MySqlConnection
,它抛出以下错误:
System.NotSupportedException:“要模拟的类型 (MySqlConnection) 必须是接口、委托或非密封、非静态类。”
有没有办法在不更改我试图为其编写单元测试的代码的情况下模拟
MySqlConnection
?
您可以创建一个内存数据库来模拟应用程序数据库上下文,并将测试数据添加到内存数据库中进行测试。
请参考以下代码。
// 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();
}