gpt4 book ai didi

c# - 如何在单元测试之间重置 EF7 InMemory 提供程序?

转载 作者:行者123 更新时间:2023-12-03 05:56:23 28 4
gpt4 key购买 nike

我尝试使用 EF7 InMemory 提供程序进行单元测试,但测试之间 InMemory 数据库的持久性给我带来了问题。

以下代码演示了我的问题。一个测试会起作用,而另一个测试总是会失败。即使我在测试之间将 _context 设置为 null,第二次测试运行中始终会有 4 条记录。

[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; }
}

最佳答案

以下调用将清除内存中的数据存储。

_context.Database.EnsureDeleted();

请注意,您永远不会意外地在生产数据库上运行它。根据documentation :

警告:整个数据库将被删除,并且不会仅删除模型为此上下文使用的数据库对象。

关于c# - 如何在单元测试之间重置 EF7 InMemory 提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33490696/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com