Moq并设置DB Context

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

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

电子DB数据库文件

public partial class ElectronicsContext : DbContext { public ElectronicsContext() { } public ElectronicsContext(DbContextOptions options) : base(options) { } public virtual DbSet Product { get; set; } public virtual DbSet ProductCategory { get; set; } 

Startup.cs

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

Moq Nunit测试

  [SetUp] public void Setup() { var ElectronicsContext = new Mock(); var ProductRepository = new Mock(); Product producttest = new Product(); _dbContext.Product.Add(new Product {ProductId = 1, ProductName = "TV", ProductDescription = "TV testing",ImageLocation = "test"}); _dbContext.SaveChanges(); 

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

 [TestMethod] public void TestProducts() { var options = new DbContextOptionsBuilder() .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提供的连接字符串不会用作测试的一部分。

更多信息可以在这里找到