Moq并设置DB Context

Har*_*est 0 c# nunit moq entity-framework-core asp.net-core

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

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

Electronics DB上下文文件

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; }
Run Code Online (Sandbox Code Playgroud)

Startup.cs

    var connection = @"Server=localhost;Database=Electronics;Trusted_Connection=True;ConnectRetryCount=0";
    services.AddDbContext<ElectronicsContext>(options => options.UseSqlServer(connection));
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

Sim*_*Ged 9

您不需要在单元测试中模拟上下文.您应该使用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

    }
}
Run Code Online (Sandbox Code Playgroud)

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

更多信息可以在这里找到