Как протестировать пользовательский интерфейс WPF?
использование формы win с MVC/MVP архитектура, я обычно использую класс, чтобы обернуть представление для тестирования пользовательского интерфейса при использовании mocks для модели и контроллера / докладчика. Класс-оболочка сделает почти все в пользовательском интерфейсе наблюдаемым свойством для тестового запуска через свойства и события.
будет ли это жизнеспособным подходом к тестированию приложения WPF? Есть ли лучший способ? Нет ли подводных камней остерегаться?
13 ответов:
Что касается самого тестирования, вам, вероятно, лучше всего использовать автоматизация пользовательского интерфейса основы. Или если вы хотите более свободно и wpf / winforms / win32 / swt-независимый способ использования фреймворка, вы можете скачать Белый из Codeplex (при условии, что вы можете использовать открытый исходный код в своей среде).
для gotchas; если вы пытаетесь проверить свои представления, вы, вероятно, столкнетесь с некоторыми проблемами с потоками. Например, если вы запуск NUnit по умолчанию testrunner будет работать в MTA (многопоточная квартира), в то время как WPF должен работать как STA (однопоточная квартира). Майк Два имеет реальный легкий приступать к работе на модульном тестировании WPF, но без учета проблемы резьбы. У Джоша Смита есть некоторые мысли о проблеме резьбы в этот пост, и он также указывает на в этой статье Крис Hedgate. Крис использует модифицированную версию Питера Провоста CrossThreadTestRunner чтобы обернуть проблемы MTA/STA немного более дружелюбным способом.
@Мэтт Дэвид,
пожалуйста, прочитайте документацию и взгляните на примеры кода для Microsoft CompositeWPF (Он же Призма). Это проект, созданный специально для того, чтобы научить, как работать с архитектурой MVP/MVC в тестовом режиме. Их пример приложения содержит модульные тесты для докладчиков\контроллеров и очень крутые приемочные тесты для пользовательского интерфейса (они используют белые рамки для имитации действий пользователя)
вручную. Я не большой поклонник automated тестирование пользовательского интерфейса если это то, что вы имеете в виду. Я не уверен в руководствах WPF (нужно прочитать ссылки aku).. потому что они все еще твердеют, так сказать... WPF не стабилизировался с точки зрения "что такое правильный путь". Если вы не используете один из этих развивающихся фреймворков.. Я был бы консервативным w.r. t. усилие
- тест (автоматизированный предпочтительно TDDed) логика / докладчики / контроллеры безжалостно. Я не сторонник разгильдяйства или летаргии.
- держите кожу пользовательского интерфейса тонкой и получите некоторые неприятные тестеры чтобы пойти (вручную) взломать его с помощью исследовательского тестирования - ничто не так хорошо, как "тестер из ада", когда дело доходит до UIs. Усилие: коэффициент усиления от автоматизации такого рода тестирования огромен, не улавливает все и не имеет смысла... кроме того, чтобы успокоить высокое начальство-Смотри прил! Без рук! самотестирование УИС!-
PS: вы можете посмотреть это (Google Talk Мэри Поппендик на Lean).. в том числе в рубрике Что автоматизировать в тестировании
обновление 2016: используйте бесплатный тестовый стек.Белый фреймворк для автоматизации тестирования пользовательского интерфейса WPF
- проект Уайт был заброшен, но его преемник TestStack.Белый доступно через пакет NuGet.
- TestStack.Белый имеет утилиты методы для запуск приложений WPF,найти окно/элементы управления пользователя,нажатие кнопки/элементы, имитируя мышь и клавиатура событий, ожидание и т. д..
пример, который запустит приложение WPF, нажмите кнопку и проверьте результат выглядит следующим образом:
using TestStack.White; using TestStack.White.UIItems; using TestStack.White.Factory; [TestMethod] public void TestDoSomething() { //Opens the app var app = Application.Launch("MyApp.exe"); //Finds the main window (this and above line should be in [TestInitialize]) var window = app.GetWindow("My App Window Title", InitializeOption.NoCache); //Finds the button (see other Get...() methods for options) var btnMyButton = window.Get<Button>("btnMyButtonWPFname"); //Simulate clicking btnMyButton.Click(); //Gets the result text box //Note: TextBox/Button is in TestStack.White.UIItems namespace var txtMyTextBox = window.Get<TextBox>("txtMyTextBox"); //Check for the result Assert.IsTrue(txtMyTextBox.Text == "my expected result"); //Close the main window and the app (preferably in [TestCleanup]) app.Close(); }
Призма (композитный WPF) строится в первую очередь с учетом "тестируемости". Идите на это, если вы думаете, что это соответствует вашему типу развития.
и вот это эпизод dotnetrocks вы можете слушать, если вам нужна дополнительная информация о Prism в аудио.
вы также можете попробовать Guia. Это позволяет напрямую модульного теста один в WPF элементы управления UserControl.
Это будет работать просто отлично, проще, чем с формами win.
проверьте "руководство по качеству приложений WPF", он имеет довольно много на тестирование интерфейса WPF. Также не забывайте, что класс класса automationpeer.
определенно посмотрите TestAutomationFX.com. можно инвестировать (хорошо, я сделал) много времени, пытаясь захватить / записать события с белым цветом. (В начале моего поиска я проигнорировал сообщение или два в других местах, ссылаясь на него).
Я, конечно, второй другие моменты о лучшем типе тестирования не является тестирование пользовательского интерфейса.
но если кто-то собирается сделать что-то автоматизируемое в пользовательском интерфейсе, чтобы обойти недостатки в других типах тестового покрытия, TAFX кажется самым быстрым маршрут туда.
попробуйте Ranorex V2.0 для автоматизации WPF. С помощью RanoreXPath и Ranorex репозитория код автоматизации тестирования может быть полностью отделен от идентификационной информации. Ranorex также предоставляет редактор захвата / воспроизведения на основе объектов RanoreXPath.
вместо того, чтобы использовать автоматические тестеры, вы можете создать истинные модульные тесты для вашего графического интерфейса с помощью IcuTest.
Я бы рекомендовал TestAutomationFX также для простой автоматизации тестирования пользовательского интерфейса. TestAutomationFX позволяет работать с netadvantage tools для wpf aswell, который не работает с white и QTP. TestAutomationFX имеет простой в использовании интерфейс, он интегрируется с visual studio и имеет хороший рекордер для записи пользовательских событий.
вы можете использовать модель автоматизации пользовательского интерфейса: http://msdn.microsoft.com/en-us/library/ms747327.aspx и http://www.telerik.com/automated-testing-tools/support/documentation/user-guide/write-tests-in-code/silverlight-test-automation/wpf-test-automation.aspx
Comments