c# - 最小起订量和设置数据库上下文

标签 c# asp.net-core nunit entity-framework-core moq

我有一个 Entity Framework 数据库上下文文件。
我正在尝试在 NUnit 中设置一个 Moq 框架。目前在 Moq Nunit 测试中收到以下错误。我将如何设置 DBContext,并将项目添加到产品表?

“没有为此 DbContext 配置数据库提供程序。可以通过覆盖 DbContext.OnConfiguring 方法或在应用程序服务提供程序上使用 AddDbContext 来配置提供程序。如果使用 AddDbContext,那么还要确保您的 DbContext 类型接受 DbContextOptions 对象它的构造函数并将其传递给 DbContext 的基本构造函数。”

电子数据库上下文文件

public partial class ElectronicsContext : DbContext
{
    public ElectronicsContext()
    {
    }

    public ElectronicsContext(DbContextOptions<ElectronicsContext> options)
        : base(options)
    {
    }

    public virtual DbSet<Product> Product { get; set; }
    public virtual DbSet<ProductCategory> ProductCategory { get; set; }

Startup.cs
    var connection = @"Server=localhost;Database=Electronics;Trusted_Connection=True;ConnectRetryCount=0";
    services.AddDbContext<ElectronicsContext>(options => options.UseSqlServer(connection));

Moq Nunit 测试
 [SetUp]
 public void Setup()
 {
    var ElectronicsContext = new Mock<ElectronicsContext>();
    var ProductRepository = new Mock<ProductRepository>();

    Product producttest = new Product();
    _dbContext.Product.Add(new Product {ProductId = 1, ProductName = "TV", ProductDescription = "TV testing",ImageLocation = "test"});
    _dbContext.SaveChanges();

最佳答案

您不需要在单元测试中模拟上下文。您应该使用 DbContextOptions类来指定您要使用内存数据库来运行您的测试。

[TestMethod]
public void TestProducts()
{
    var options = new DbContextOptionsBuilder<ElectronicsContext>()
        .UseInMemoryDatabase(databaseName: "Products Test")
        .Options;

    using(var context = new ElectronicsContext(options))
    {
        context.Products.Add(new Product {ProductId = 1, ProductName = "TV", ProductDescription = "TV testing",ImageLocation = "test"});
        context.SaveChanges();
    }

    using(var context = new ElectronicsContext(options))
    {
        // run your test here

    }
}

这针对数据库的内存表示运行,而不是依赖于物理服务器。您在 startup.cs 中提供的连接字符串不用作测试的一部分。

更多信息请见here

关于c# - 最小起订量和设置数据库上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52810039/

相关文章:

c# - 从使用 XSD.exe 生成的 XML 反序列化类

c# - 如何创建返回集合的 XAML 标记扩展

c# - 了解 C# 中的语法

.net - 如何使用 .NET TEST EXPLORER 在 VS Code 中运行 NUnit 测试

c# - 使用 NUnit.Forms 进行 GUI 界面测试

linq - NUnit:断言IEnumerable是否包含某种类型的对象的最简洁方法是什么?

c# - NHibernate 根据分钟从日期字段中选择查询

c# - Asp.Net Core 中的 IRequestCultureFeature 和 CurrentCulture 有什么区别?

c# - 如何在 Onion 架构中使用 ASP.NET Identity?

azure - 应用服务计划在 azure devops 中的发布管道期间无法覆盖应用程序设置中的嵌套 JSON 键