Ho un file di contesto del database di Entity Framework. Sto cercando di configurare un framework Moq in NUnit. Attualmente riceve errore sotto per il test di Moq Nunit. Come configurare il DBContext e aggiungere elementi a una tabella di prodotto?
"Nessun provider di database è stato configurato per questo DbContext. Un provider può essere configurato sovrascrivendo il metodo DbContext.OnConfiguring o utilizzando AddDbContext sul provider di servizi dell'applicazione Se si utilizza AddDbContext, assicurarsi inoltre che il tipo DbContext accetti un oggetto DbContextOptions in il suo costruttore e lo passa al costruttore di base per DbContext. "
File di contesto del DB elettronico
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 Test
[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();
Non è necessario prendere in giro il contesto nei test unitari. È necessario utilizzare la classe DbContextOptions
per specificare che si desidera utilizzare un database in memoria per eseguire i test.
[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
}
}
Questo va contro la rappresentazione in memoria del tuo database invece di fare affidamento sul server fisico. La stringa di connessione fornita in startup.cs
non viene utilizzata come parte dei test.
Maggiori informazioni possono essere trovate qui