Sto cercando di utilizzare il provider InMemory EF7 per i test unitari ma la natura persistente del database InMemory tra i test mi sta causando problemi.Come posso ripristinare un provider InMemory EF7 tra i test delle unità?
Il seguente codice dimostra il mio problema. Un test funzionerà e l'altro test fallirà sempre. Anche se ho impostato _context su null tra i test, la seconda esecuzione di test avrà sempre 4 record.
[TestClass]
public class UnitTest1
{
private SchoolContext _context;
[TestInitialize]
public void Setup()
{
Random rng = new Random();
var optionsBuilder = new DbContextOptionsBuilder<SchoolContext>();
optionsBuilder.UseInMemoryDatabase();
_context = new SchoolContext(optionsBuilder.Options);
_context.Students.AddRange(
new Student { Id = rng.Next(1,10000), Name = "Able" },
new Student { Id = rng.Next(1,10000), Name = "Bob" }
);
_context.SaveChanges();
}
[TestCleanup]
public void Cleanup()
{
_context = null;
}
[TestMethod]
public void TestMethod1()
{
Assert.AreEqual(2, _context.Students.ToList().Count());
}
[TestMethod]
public void TestMethod2()
{
Assert.AreEqual(2, _context.Students.ToList().Count());
}
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
public class SchoolContext : DbContext
{
public SchoolContext(DbContextOptions options) : base(options) { }
public DbSet<Student> Students { get; set; }
}
Grazie per questo, ha risolto i miei problemi. Inizialmente ho provato le opzioniBuilder.UseInMemoryDatabase (persist: false); che è stato rimosso da EFCore e poi incappato in un'altra possibile soluzione per avere diversi contesti tra i test qui: http://docs.efproject.net/en/latest/miscellaneous/testing.html Preferisco la semplicità della risposta selezionata anche se per la composizione della radice di prova –
Questo non sembra resettare la colonna di identificazione del database in memoria. Quindi se stai seminando i dati con una riga, il primo test vedrà la riga con ID 1, il secondo test 2, ecc. È questo in base alla progettazione? – ssmith
@ssmith https://github.com/aspnet/EntityFrameworkCore/issues/4096 – djeikyb