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
提供的连接字符串不会用作测试的一部分。
更多信息可以在这里找到