gpt4 book ai didi

integration-testing - xUnit IClassFixture 构造函数被多次调用

转载 作者:行者123 更新时间:2023-12-04 04:11:41 25 4
gpt4 key购买 nike

我正在使用 xUnit 进行集成测试。为此,我使用了一个 localdb 实例。话虽如此,我想用一些预定义的数据启动一次数据库实例,当然我希望所有测试用例都如此。我可以编写隔离的每个测试用例,这样它们就不会相互运行,但是我只想创建一次数据库实例。

我关注了 xunit constructor runs before each test代码看起来像

//similar to base class
public class DatabaseFixture : IDisposable
{
public SqlConnection Db { get; private set; }
public DatabaseFixture()
{
InitialDB();
}
public InitialDB()
{
CreateDBInstance();
CreateDBSchemas();
InitDBMetaData();
}

public void Dispose()
{
// clean up test data from the database
CleanUpDB();
}
}

//Class where you want to use shared class instance
public class MyDatabaseTests : IClassFixture<DatabaseFixture>
{
DatabaseFixture dbFixture;
public MyDatabaseTests(DatabaseFixture fixture)
{
this.dbFixture = fixture;
}

// write tests, using dbFixture.Db to get access to the SQL Server
}

我面临的问题是我注意到每个测试用例每次都会调用这个 DBFixture。我认为 iClassFixture 它只被调用一次。当测试用例并行运行时会带来问题,因为它正在尝试清理数据库,而其他测试尝试访问它,并且多个测试用例会尝试同时创建数据库,这会导致错误。 https://xunit.net/docs/shared-context.html

任何人都可以阐明为什么它不起作用?

最佳答案

您需要改用 Collection Fixtures。
https://xunit.net/docs/shared-context#collection-fixture

When to use: when you want to create a single test context and share it among tests in several test classes, and have it cleaned up after all the tests in the test classes have finished.

关于integration-testing - xUnit IClassFixture 构造函数被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61603612/

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