Yil*_* Li 8 dbunit integration-testing xunit
我正在使用 xUnit 进行集成测试。为此,我使用 localdb 实例。话虽这么说,我想使用一些预定义的数据启动一次数据库实例,当然我希望所有测试用例都保持这一点。我可以单独编写每个测试用例,这样它们就不会相互冲突,但我只想创建一次数据库实例。
我在每次测试之前都遵循 xunit 构造函数的运行,代码如下所示
//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
}
Run Code Online (Sandbox Code Playgroud)
我面临的问题是我注意到每个测试用例每次都会调用这个 DBFixture。我认为使用 iClassFixture 它只被调用一次。当测试用例并行运行时,这会带来问题,因为它试图清理数据库,而其他测试尝试访问它,并且多个测试用例会尝试同时创建数据库,这会导致错误。https://xunit.net/docs/shared-context.html
任何人都可以阐明为什么它不起作用吗?
小智 1
您需要使用 Collection Fixtures 来代替。
https://xunit.net/docs/shared-context#collection-fixture
何时使用:当您想要创建单个测试上下文并在多个测试类中的测试之间共享它,并在测试类中的所有测试完成后清理它时。
| 归档时间: |
|
| 查看次数: |
2326 次 |
| 最近记录: |