Как мне реализовать AssemblyInitialize / AssemblyCleanup в моем CodedUITest в MSVS 2010? - PullRequest
0 голосов
/ 11 ноября 2011

Я пытаюсь реализовать AssemblyInitialize / AssemblyCleanup атрибутов в моей Microsoft Visual Studio 2010 для точной цели, как указано здесь . Эта ссылка даже описывает процесс, которому я должен следовать для реализации кода.

Краткое описание этой цели - создать начальный блок кода, который будет запускаться непосредственно перед любым тестом, независимо от того, какой из codedUITests я запускаю в решении, а затем блок кода, который будет выполняться после завершения последнего codedUITest. , Пример: мне нужно открыть определенное приложение, затем запустить серию codedUITests, которые все запускаются в этом приложении и которые выполняются в любом порядке, а затем закрыть приложение после того, как все будет завершено; это более эффективно, чем открытие / закрытие приложения для каждого codedUITest.

Чего я не понимаю, так это того, где мне нужно разместить код, выложенный внизу этой страницы (также показанный ниже). Я поместил весь этот код прямо под моим «открытым частичным классом UIMap», и код запускается, за исключением того, что он запускает команды «OpenApplication» и «CloseApplication» до / после каждого CodedUITest вместо того, чтобы помещать в кучу всю группу CodedUITests.

Как правильно реализовать код?

Обновление:

Я обнаружил AssemblyI / C прошлой ночью, и я потратил 3 часа, пытаясь выяснить, куда поместить код, чтобы он работал. Если я поставлю AssemblyInitialize в начале конкретного метода тестирования затем:

1) Он все еще не запускался - он давал мне ошибку, говоря, что Методы UIMap.OpenWindow () и UIMap.CloseWindow () должны быть статическими и я не мог понять, как сделать их статичными.

2) Не конкретный [TestMethod], на котором есть AssemblyI / C на нем нужно быть в тестовом наборе? В моей ситуации у меня дюжина CodedUITests, которые должны работать либо индивидуально, либо в большем группа, и мне нужно, чтобы AssemblyI / C открывать / закрывать окно я тестирование.

1 Ответ

13 голосов
/ 11 ноября 2011

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

Смысл методов ClassInitialize/ClassCleanup состоит в том, чтобы добавить их в класс с вашими методами тестирования. У вас должен быть хотя бы один класс, украшенный атрибутом TestClass, который имеет хотя бы один метод, украшенный атрибутом TestMethod. Это класс, которому нужны атрибуты ClassInitialize и ClassCleanup. Эти методы будут запускаться один раз для каждого отдельного TestClass, которое есть в вашем проекте.

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


UPDATE: AssemblyInitialize / Cleanup должны находиться в классе с атрибутом TestClass, но не имеет значения, какой именно. Один метод с каждым атрибутом будет запущен до или после любых тестов в сборке. Это не может быть тестовый метод, хотя; это должен быть статический метод, и он не будет считаться «тестом».

...