【发布时间】:2020-10-14 19:34:18
【问题描述】:
我正在使用 xUnit 编写 SQL Server 集成测试。
我的测试如下所示:
[Fact]
public void Test()
{
using (IDbConnection connection = new SqlConnection(_connectionString))
{
connection.Open();
connection.Query(@$"...");
//DO SOMETHING
}
}
因为我计划在同一个类中创建多个测试,所以我试图避免每次都创建一个新的SqlConnection。我知道 xUnit 框架本身会为每个在其中运行的测试创建一个类的实例。
这意味着我可以在构造函数中创建SqlConnection,因为无论如何每次新的测试运行都会创建一个新的。
问题在于处理它。在每次测试结束时手动处理 SqlConnection 是一种好习惯还是您认为有任何问题?
如:
public class MyTestClass
{
private const string _connectionString = "...";
private readonly IDbConnection _connection;
public MyTestClass()
{
_connection = new SqlConnection(_connectionString));
}
[Fact]
public void Test()
{
_connection.Open();
_connection.Query(@$"...");
//DO SOMETHING
_connection.Dispose();
}
}
【问题讨论】:
-
如果您不处理 SqlConnections,您最终可能会用完连接池中的连接,这将暂停测试直到它们超时或只是使它们失败。你读过Shared Context Between Tests 了吗?如果你想在一个类的多个测试之间共享一个连接,听起来你想实现一个
IClassFixture<...>。
标签: c# .net sql-server xunit