首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#实体框架XUnit测试总是失败

C#实体框架XUnit测试总是失败
EN

Stack Overflow用户
提问于 2022-03-22 19:04:11
回答 1查看 241关注 0票数 0

我目前正在尝试设置一些测试,以检查我的代码是否正常工作。但是,当我有多个测试时,所有的测试都失败了。

我认为这是因为它们是并行运行的,这显然导致了与数据库上下文的冲突。

为了抵消这一点,我尝试了一个内存数据库,并基于guid创建了一个新的数据库,这个guid在测试之前就被解析了,但是,我读到内存数据库中并不是最好的测试方法,因为它不是真正的反映。因此,我选择使用测试Server。我计划在每次测试后拆掉它--我知道这可能比平常要花很多时间,但我很乐意接受,因为它准确地反映了与数据库交互的代码。

然而,为此,我认为我需要单独运行测试,而不是并行运行。

我的测试非常简单,它只是测试一个200和一个计数。单独运行它们是非常有效的。

代码语言:javascript
复制
public class GetUserEndpointTest()
{
  [Fact]
  public async Task OnSuccess_ReturnStatusCodeOk()
  {
    await using var application = new Application();
    var client = application.CreateClient();

    var response = await client.GetAsync("/v1/users");
    response.EnsureSuccessStatusCode();
  }

  [Fact]
  public async Task OnSuccess_ReturnsTheCorrectUserCount()
  {
    await using var application = new Application();
    var client = application.CreateClient();

    var users = await client.GetFromJsonAsync<List<User>>("/v1/users");
    users.Count.Shound().Be(1);
  }  
}

我的应用程序工厂很简单:

代码语言:javascript
复制
class Application : WebApplicationFactory<Program>
{
  protected override IHost CreateHost(IHostBuilder builder)
  {
    builder.ConfigureServices(services =>
    {
      services.RemoveAll(typeof(DbContextOptions<ApplicationContext>));
      services.AddDbContext<ApplicationContext>(options =>
        {
          options.UseSqlServer(
            "Server=localhost;Database=testing_database;Trusted_Connection=True;"
          );
        });
     });

     return base.CreateHost(builder);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-23 11:28:29

在用XUnit进行测试时,可以通过将它们放在“集合”中来防止测试的并行执行。通过用Collection属性“修饰”类声明来声明哪些测试属于集合。

这是在https://xunit.net/docs/running-tests-in-parallel上解释的。

例如:

代码语言:javascript
复制
    [Collection("NonParallelTestCollection")]
    public class MyUnitTests1
    {
    // your tests here ...
    }

    [Collection("NonParallelTestCollection")]
    public class MyUnitTests2
    {
    // your tests here ...
    }

在本例中,两个类中的任何一个测试都不会并行运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71577600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档