gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:33:00 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com