这是一个坏主意,有一个静态连接和事务的单元测试夹具
本文关键字:连接 静态 有一个 事务 夹具 单元测试 一个 | 更新日期: 2023-09-27 18:09:57
我计划为SqlConnection和SqlTransaction创建静态私有变量,我计划在[ClassInitialize()]签名方法中创建,然后在[ClassCleanup]签名方法中处置。
我想实现的是在整个测试过程中共享连接和事务,然后在最后一次单元测试运行结束时回滚所有内容。
像下面。
这是个坏主意吗?我应该担心线程安全吗?
[ClassInitialize()]
public static void DataManagerTestInitialize(TestContext testContext)
{
// Create Connection for Test Fixture
_connection = new SqlConnection(ConnectionString);
// Open Connection for Test Fixture
_connection.Open();
// Open Transaction for Test Fixture
_transaction = _connection.BeginTransaction();
}
[ClassCleanup]
public static void CleanUp()
{
if(_transaction!=null)
_transaction.Rollback();
if(_connection.State != ConnectionState.Closed)
_connection.Close();
}
这是个坏主意。连接意味着打开-使用-然后关闭。交易也是如此。此外,您的测试应该彼此独立,共享连接/事务违反了这一原则。
如果有人在调试一个特定的单元测试,您应该担心数据库中的锁。如果您使用的数据库与您的开发发生在同一数据库上,这可能会非常令人沮丧,当您正在开发某些东西时(例如),性能真的很差,或者他甚至会因为某人在数据库上设置锁而超时。
如果你不想改变你的数据库(在单元测试时你不会这样做),你应该能够模拟/替换碰到数据库的代码。有几种方法可以实现这一点,但我最喜欢的是使用依赖注入。这使得您的应用程序更容易维护,因为它迫使您仔细考虑应用程序的各个部分公开了哪些方法。此外,抽象将使重构更容易。