Test di ASP.NET 5 con Entity Framework 7 utilizzando nel database di memoria

asp.net-core entity-framework-core testing

Domanda

Sto cercando di ottenere il contesto che sto iniettando nei controller durante il test e modificare i dati nella versione "in memoria" del contesto del database.

Quindi il controller sembra così

[Route("api/[controller]")]
public class TestController : Controller
{
    private readonly TestContext _testContext;
    public TestController(TestContext testContext)
    {
        _testContext = testContext;
    }

    [HttpGet]
    public IActionResult Get()
    {
        return Ok(new { _testContext.Users });
    }
}

Il test sembra così

public class SiteTests
{
    [Fact]
    public async Task GetIt()
    {
        var server = TestServer.Create(app => { app.UseMvc(); }, services =>
        {
            services.AddMvc();

            services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<TestContext>(options => options.UseInMemoryDatabase());

            services.AddScoped<TestContext, TestContext>();
        });

        var client = server.CreateClient();

        var response = await client.GetAsync("http://localhost/api/test");
        var content = await response.Content.ReadAsStringAsync();

        Assert.True(response.IsSuccessStatusCode);
    }
}

Mi piacerebbe in qualche modo ottenere il contesto prima che il client ottenga la richiesta e modificare quali dati torneranno dal contesto del database.

Ho il progetto di test in GitHub

Risposta popolare

Se stai prendendo di mira .NET Core, non sarai in grado di utilizzare alcun quadro di simulazione automatica.

Il meglio che puoi fare è rendere virtuali tutti i tuoi metodi in TestContext , quindi estenderli nei tuoi test unitari.

public class IntegrationTestContext : TestContext
{
    // override methods here
}

È quindi possibile utilizzare

var context = new IntegrationTestContext();
services.AddInstance<TestContext>(context);

È inoltre possibile acquisire qualsiasi informazione aggiuntiva desiderata in IntegrationTestContext e accedervi dal test.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché