2016-06-30 10 views
-1

У меня есть 3 проекта в моем решении Visual Studio: 1 проект общей библиотеки, 1 проект тестирования (в основном, тесты Selenium WebDriver) и 1 проект с кодированным пользовательским интерфейсом (мне было сложно комбинировать мои модульные тесты и кодированные тесты пользовательского интерфейса в 1 проект - так что у нас есть 2). У меня есть статический класс со статическим свойством в проекте общей библиотеки, называемом Globals.Status.Статическая переменная в тестах в разных тестовых проектах

У меня есть один тестовый пример, где требуется работа, выполненная как в броузерах (Selenium unit test), так и в настольном приложении (кодированный тест пользовательского интерфейса). Тест Selenium unit изменяет эту статическую переменную состояния. Закодированный тест пользовательского интерфейса (в кодированном проекте пользовательского интерфейса) должен прочитать эту обновленную переменную состояния. Когда я запускаю эти 2 теста последовательно, переменная NULL при вызове кодированного теста пользовательского интерфейса.

У меня есть проект тестирования кодированного пользовательского интерфейса, ссылающийся как на проект общей библиотеки, так и на проект тестирования модуля, но этого явно недостаточно. Что мне нужно сделать, чтобы сделать эту работу?

Спасибо за понимание!

+3

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

+0

Я понимаю эту концепцию. Да, в идеале я бы объединил оба эти теста в один тест. К сожалению, как я уже сказал, мне было трудно помещать как тестовый код Selenium WebDriver, так и Code Code в тот же проект. Этот один конкретный функциональный тест требует некоторой работы в веб-браузере (следовательно, Selenium) и некоторых других последующих работ на настольном приложении (следовательно, кодированный пользовательский интерфейс). – AngieM

ответ

1

Вы должны поддержать свою недвижимость с данными, которые были сохранены вне приложения (более конкретно, вне пространства памяти исполняющей сборки).

Есть несколько разумных способов, которыми вы могли бы это сделать. AppFabric Cache, Redis или, возможно, Memcached приходят на ум.

+0

Спасибо за этот совет. Я закончил тем, что сохранил это значение в текстовом файле, который должен быть прочитан тестом CUIT. – AngieM

1

Я предполагаю, что ваш тест пользовательского интерфейса работает на новом AppDomain. Каждый AppDomain создает собственные экземпляры всех статических переменных.

Что вы можете сделать, это переместить блок-тестирования кода в новый класс и выполнить его в UI-тест


P.S.

Испытания не должны зависеть от глобального состояния. Кроме того, одно испытание не должно зависеть от других тестов.

Это будет особенно сложно, если когда-либо хотят тесты, чтобы выполнить параллельно

Вот хороший разговор, почему глобальное состояние плохо, и что вы можете сделать по этому поводу: https://www.youtube.com/watch?v=-FRm3VPhseI

+0

Спасибо за советы и понимание AppDomain. Да, я понимаю, что это был не идеальный дизайн. Я не мог заставить библиотеки Selenium WebDriver и Coded UI хорошо играть вместе в одном и том же тестовом проекте, поэтому мне пришлось прибегать к тому, чтобы держать их в отдельности. Возможно, мне придется попробовать еще раз, когда время позволяет объединить их в один. – AngieM

+0

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