Это ПЛОХАЯ идея иметь статическое соединение и транзакцию для прибора модульного тестирования? - PullRequest
0 голосов
/ 26 сентября 2011

Я планирую создать статические частные переменные для 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();
        }

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

Это плохая идея. Соединения предназначены для открытия - использования - затем закрытия. То же самое касается транзакций. Кроме того - ваши тесты должны быть независимы друг от друга, и разделение соединения / транзакции нарушает этот принцип.

0 голосов
/ 26 сентября 2011

Вам следует беспокоиться о блокировках в базе данных, если кто-то отлаживает определенный модульный тест. Если база данных, которую вы используете, - это та же база данных, в которой происходит ваша разработка, это может быть очень неприятно, когда вы разрабатываете что-то (например), и производительность действительно плохая, или он даже получает тайм-ауты из-за того, что кто-то блокирует базу данных.

Если вы не хотите менять свою базу данных (чего вы не хотите при модульном тестировании), вы сможете смоделировать / заменить код, попадающий в базу данных. Есть несколько способов добиться этого, но мой любимый - использовать Dependency Injection. Это значительно упрощает поддержку вашего приложения, так как заставляет вас тщательно продумывать, какие методы предоставляются различными частями вашего приложения. Плюс абстракция облегчит рефакторинг.

...