如何创建单元测试来访问c#中的视图

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

我刚开始为服务类创建单元测试。我在访问我的上下文中的视图时遇到问题。 我有两个上下文,一个用于写入,一个用于读取。下面是用于读取的上下文文件的示例。

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);

但在此之后,我完全一片空白,不知道如何访问视图。那么是否可以模拟数据库和访问视图。 任何帮助将不胜感激

c# visual-studio unit-testing nunit
1个回答
0
投票

在 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 是代表视图结构的类或模型。将其替换为适当的类名。

© www.soinside.com 2019 - 2024. All rights reserved.