2015-09-03 1 views
1

я тестирование модуля, где каждый класс испытаний разделяют такое же поведение:C# Модульное тестирование с TestInitialize/TestCleanup в базовом классе

  • начать транзакцию
  • Execute SQL запросов
  • Откат транзакции

Я решил использовать TestInitialize и TestCleanup для выполнения Begin и Rollback транзакций соответственно.

Подход с прямым проходом будет записывать TestInitialize/TestCleanup в родительский класс, но это не будет работать с этой базой тестирования.

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

Кто-нибудь знает лучший способ сделать это?

Вот образец частичного класса решения:

В моем случае я проверяю каждый модуль отдельно, и для этого примера я буду использовать Sales модуль:

SalesTest.cs файл:

[TestClass] 
public partial class SalesTest 
{ 
    [TestInitialize] 
    public void Setup() 
    { 
     //begin transaction 
    } 

    [TestCleanup] 
    public void Cleanup() 
    { 
     //rollback transaction 
    } 
} 

SalesTest.Order файл :

public partial class SalesTest 
{ 
    [TestMethod] 
    public void SaveOrder_OnlyRequiredValuesFilled_SuccessfullySaved() 
    { 
     //Run some SQL queries 
    } 
} 

ответ

6

Похоже, вы используете рамки Microsoft.VisualStudio.TestTools.UnitTesting. Я не вижу проблемы с использованием базового класса для очистки и инициализации.

E.g.

[TestClass] 
    public class TestDemo : BaseTests 
    { 
     [TestMethod] 
     public void SaveOrder_OnlyRequiredValuesFilled_SuccessfullySaved() 
     { 
      //Run some SQL queries 
     } 

    } 

    [TestClass] 
    public abstract class BaseTests 
    { 
     [TestInitialize] 
     public void Setup() 
     { 
      Console.WriteLine("Setup executed."); 
      //begin transaction 
     } 

     [TestCleanup] 
     public void Cleanup() 
     { 
      Console.WriteLine("Cleanup executed."); 
      //rollback transaction 
     } 
    } 

Это будет работать нормально, и я могу наследовать BaseTest к любому испытанию и Intiailize и очистка будет выполняться до и после любого испытания.

Смежные вопросы