我刚开始为服务类创建单元测试。我在访问我的上下文中的视图时遇到问题。 我有两个上下文,一个用于写入,一个用于读取。下面是用于读取的上下文文件的示例。
public class readContext : DbContext
{
private readonly IOptions<DatabaseConfig> _dbConfiguration;
public readContext(IOptions<DatabaseConfig> dbConfiguration)
{
_dbConfiguration = dbConfiguration;
}
public DbSet<AppVM> AppVMs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new AppVMMap());
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_dbConfiguration.Value);
}
}
写出上下文:
public class writeContext : DbContext, IUnitOfWork
{
private readonly IOptions<DatabaseConfig> _dbConfiguration;
public static readonly LoggerFactory _myLoggerFactory =
new LoggerFactory(new[] {
new DebugLoggerProvider()
});
public writeContext(IOptions<DatabaseConfig> dbConfiguration)
{
_dbConfiguration = dbConfiguration;
}
public writeContext(DbContextOptions _dbConfiguration) : base(_dbConfiguration)
{
}
public DbSet<Sample1> Sample1 { get; set; }
public DbSet<Sample2> Sample2 { get; set; }
public DbSet<Sample3> Sample3 { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new sample1Map());
modelBuilder.ApplyConfiguration(new sample2Map());
modelBuilder.ApplyConfiguration(new sample3Map());
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseLoggerFactory(_myLoggerFactory);
}
public async Task<bool> SaveEntitiesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
await base.SaveChangesAsync();
return true;
}
}
在单元测试 - 设置方法中,我尝试创建一个内存数据库来访问上述上下文。
var writeBuilder = new DbContextOptionsBuilder<writeContext>().UseInMemoryDatabase(databaseName: "Sample").EnableSensitiveDataLogging(true);
_writeContext = new writeContext(writeBuilder.Options);
var builder = new DbContextOptionsBuilder<readContext>().UseInMemoryDatabase(databaseName: "Sample") .EnableSensitiveDataLogging();
var context = new readContext(builder.Options);
但在此之后,我完全一片空白,不知道如何访问视图。那么是否可以模拟数据库和访问视图。 任何帮助将不胜感激
在 Entity Framework Core 中,您可以使用 DbContext 创建自定义查询来访问单元测试中的视图。您可以尝试下面的代码,看看是否对您有帮助。如果有任何疑问,请告诉我。
在 DbContext 类中,创建一个从视图返回数据的自定义查询方法。
public IQueryable<AppVM> GetAppVMs()
{
return AppVMs;
}
在单元测试方法中,使用自定义查询方法从视图访问数据。
[TestMethod]
public void Test_GetAppVMs()
{
// Arrange: Create an instance of the DbContext
var builder = new DbContextOptionsBuilder<readContext>()
.UseInMemoryDatabase(databaseName: "Sample")
.EnableSensitiveDataLogging();
var context = new readContext(builder.Options);
// Act: Call the custom query method to get data from the view
var appVMs = context.GetAppVMs().ToList();
// Assert: Perform your assertions on the retrieved data
Assert.AreEqual(10, appVMs.Count);
}
此示例假设 AppVM 是代表视图结构的类或模型。将其替换为适当的类名。