3

Im WebAPI (.NET Core 2.0 + EF Core) Projekt in Startup.csInstantiate eine DbContext in IntegrationTests

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddDbContextPool<MyContext>(options => 
     options.UseSqlServer(_config["ConnectionStrings:MyConnectionString"])); 

    services.AddMvc(); 
} 

Der Kontext:

public class MyContext : DbContext 
{ 
    public MyContext(DbContextOptions<MyContext> options) 
     : base(options) 
    { } 

    public MyContext() 
    { 
    } 

    public DbSet<Employee> Employees { get; set; } 
} 

Kein Problem, wenn ich die WebAPI nennen.

Aber in meinem Integrationstest, würde ich dies tun:

[Fact] 
void TestMethod() 
{ 
    var context = new MyContext(); 

    var service = new MyService(context); 

    var result = service.GetAll();//Error here 

    Assert.True(result.Count() > 0); 
} 

ich diesen Fehler:

Kein Datenbank-Anbieter hat für diese DbContext konfiguriert wurde. Ein Provider kann durch Überschreiben der DbContext.OnConfiguring Methode oder unter Verwendung AddDbContext auf dem Application Service Provider

Wie so konfiguriert werden, kann ich den Kontext instanziiert und geben Sie die Connectionstring zu benutzen?

Antwort

4

Der Kontext muss immer noch die Verbindungszeichenfolge und Konfiguration abrufen, während Ihr Standardkonstruktor all dies umgeht.

Zunächst Standardkonstruktor in Ihrem Db Kontext den Test Vorteil der bereits vorhandenen Konfigurationsfunktionalität

[Fact] 
void TestMethod() { 
    //Arrange 
    var optionsBuilder = new DbContextOptionsBuilder<MyContext>(); 
    optionsBuilder.UseSqlServer("connection string here"); 

    using (var context = new MyContext(optionsBuilder.Options)) { 
     var service = new MyService(context); 

     //Act 
     var result = service.GetAll();//Error here 

     //Assert 
     Assert.True(result.Count() > 0); 
    } 
} 

Referenz zu nehmen Configuring a DbContext: Configuring DbContextOptions

aktualisieren

public class MyContext : DbContext { 
    public MyContext(DbContextOptions<MyContext> options) 
     : base(options) 
    { } 

    public DbSet<Employee> Employees { get; set; } 
} 

Weiter loswerden