本文介绍了如何在单元测试之间重置EF7 InMemory提供程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用EF7 InMemory提供程序进行单元测试,但是两次测试之间InMemory数据库的持久性导致我遇到问题.
I am trying to use the EF7 InMemory provider for unit tests but the persistent nature of the InMemory database between tests is causing me problems.
以下代码演示了我的问题.一个测试将起作用,而另一个测试将始终失败.即使我在两次测试之间将_context设置为null,第二次测试运行仍将始终包含4条记录.
The following code demonstrates my issue. One test will work and the other test will always fail. Even though I set the _context to null between tests the second test run will always have 4 records in it.
[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; } }推荐答案
以下调用将清除内存中的数据存储.
The following call will clear the in-memory datastore.
_context.Database.EnsureDeleted();更多推荐
如何在单元测试之间重置EF7 InMemory提供程序?
发布评论