这是一个坏主意,有一个静态连接和事务的单元测试夹具

本文关键字:连接 静态 有一个 事务 夹具 单元测试 一个 | 更新日期: 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();
        }

这是一个坏主意,有一个静态连接和事务的单元测试夹具

这是个坏主意。连接意味着打开-使用-然后关闭。交易也是如此。此外,您的测试应该彼此独立,共享连接/事务违反了这一原则。

如果有人在调试一个特定的单元测试,您应该担心数据库中的锁。如果您使用的数据库与您的开发发生在同一数据库上,这可能会非常令人沮丧,当您正在开发某些东西时(例如),性能真的很差,或者他甚至会因为某人在数据库上设置锁而超时。

如果你不想改变你的数据库(在单元测试时你不会这样做),你应该能够模拟/替换碰到数据库的代码。有几种方法可以实现这一点,但我最喜欢的是使用依赖注入。这使得您的应用程序更容易维护,因为它迫使您仔细考虑应用程序的各个部分公开了哪些方法。此外,抽象将使重构更容易。