2012-04-19 3 views
1

Итак, у меня есть следующий код, который я хочу запустить только один раз. Я хочу, чтобы он настраивался в самом начале всех тестовых образцов, которые я запускал, и один раз в конце.Как использовать один SetUpTestFixture для нескольких классов?

[RequiresSTA] 
    class Prepare 
    { 
     [TestFixtureSetUp] 
     public void Setup() 
     { 
      IE Window = new IE("http://www.google.com"); 
     } 

     [TestFixtureTearDown] 
     public void Teardown() 
     { 
      IE Window = IE.AttachTo<IE>(Find.ByTitle("Google")); 
      Window.Dispose(); 
     } 
    } 

У меня есть несколько классов в моем проекте в том же пространстве имен, позволяет называть их Class1 - 4. Я хочу, чтобы настроить его так, когда я запустить эти тесты, Готовят только вызывается раз. Пример:

Запуск 3 + 4:

Prepare Setup 
    Run3 
    Run4 
Prepare Teardown 

Запуск 1 - 4:

Prepare Setup 
    Run1 
    Run2 
    Run3 
    Run4 
Prepare Teardown 

В настоящее время подготовка инициирует каждый раз, когда набор начинается, а затем приходит к выводу, каждый раз, когда они заканчиваются , Как я могу сделать это contiuos до тех пор, пока все тесты в этом пространстве имен не будут запущены?

ответ

1

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

Вы должны быть осторожны при этом. Это замаскирует настройку любому, кто смотрит только на подкласс. Если вы не отмените настройку и, по крайней мере, вызовите base.Setup в каждом классе.

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

Единственный способ обойти это было бы, чтобы все ваши тесты были в одном крепете, что опять-таки было бы плохой тестовой конструкцией.

UPDATE

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

Что примечательно, чтобы вытащить из приведенной выше ссылке это:

только один SetUpFixture должен быть создан в заданном пространстве имен. A SetUpFixture вне любого пространства имен предоставляет SetUp и TearDown для всю сборку.

+0

Этот класс Prepare является моим базовым классом, каждый из моих классов наследует этот класс, но они запускают установки каждый раз, а не только один раз. Не могли бы вы привести пример? Может быть, я не понимаю, что вы говорите. –

+0

@Emerica. Я просто добавил, чтобы более точно ответить на ваш вопрос.Пожалуйста, обновите и перечитайте –

+0

Я в основном хочу, чтобы они были настроены только с тем же экземпляром браузера. У каждого теста есть свои собственные настройки, но я хочу снова использовать браузер. –

1

Создание приспособления для установки сборки было бы наилучшим способом.

//This class does not have a namespace on purpose, do not add one. 
    [SetUpFixture] 
    public class AssemblySetupFixture 
    { 
    [SetUp] 
    public void SetupTestSuite() 
    { 
     Debug.WriteLine("Setting up Test Assembly Fixture"); 
    // Kill all web server instances and then restart them 
     WebServerHelper.StopAll(); 
     WebServerHelper.StartAll(); 
     DatabaseHelper.RestoreDefaultDatabases(); 
    } 

    [TearDown] 
    public void TearDownTestSuite() 
    { 
     Debug.WriteLine("Tearing down Assembly Fixture"); 
     WebServerHelper.StopAll(); 
    } 
    } 
+0

Да, я попробовал это. Ассембли без пространства имен становятся универсальными установками/разрывами. Все еще выполнялось индивидуально при прощении и окончании каждого теста. Я начинаю думать, что нет никакого решения сделать именно то, что мне нужно. –

+0

Странно, я использовал это в нескольких проектах и ​​всегда работал. Что вы используете для запуска тестов? –

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