针对数据库运行多个集成测试 - 没有冲突

问题描述 投票:0回答:1

我有一堆不同的实体框架集成测试。每个当然都以 EnsureDeleted()/EnsureCreated() 开头。这就是问题所在。

如果它们都使用相同的数据库,那么当 xUnit 同时运行多个测试并且它们锁定数据库时,测试将失败。

如果他们都使用不同的数据库,那么我将在我的系统上得到 15 - 30 个测试数据库(当然,不是世界末日)。

有没有解决这个问题的方法?我唯一想到的是:

  1. 告诉 xUnit 按顺序运行所有集成测试——这会大大降低速度。
  2. 为每个测试指定自己的数据库名称,并在每个测试结束时调用 EnsureDeleted()。
  3. 另一种方法???

对这个问题有什么建议吗?我在考虑每次测试结束时的 EnsureDeleted() - 这种方法有什么问题吗?

entity-framework entity-framework-core xunit
1个回答
0
投票

根据@AlexanderPetrov 的评论和两个优秀的链接,我设置了每个单元测试都有不同的数据库名称用于测试。

我做了以下(效果很好):

context.Database.EnsureDeleted();
context.Database.EnsureCreated();

// all the tests

context.Database.EnsureDeleted();

你可以把它放在 try/finally 中,在 finally 中使用最后的 EnsureDeleted()。我没有那样做,因为通常,当测试失败时,我发现数据库内容对于找出失败的原因很有用。

© www.soinside.com 2019 - 2024. All rights reserved.