22
Тестирование UI

Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Embed Size (px)

Citation preview

Page 1: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Тестирование UI

Page 2: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Джентельменский набор

• MVP

• NUnit

• NUnitForms

• RhinoMocks(NMock)

• Windows PowerShell

Page 3: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Тестирование UI

• Код, который легко тестировать

• Тесты, которые легко «кодить»

Page 4: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Model View Controller

Model View

Controller

Page 5: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Model View Controller

Model

Controller

Displaylogic

Presen-tationlogic

View

Page 6: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

MVP

Model View

Presenter

Event/Observer

Model View Presenter

Page 7: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Model View Presenter

Page 8: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

MVP

public interface IOrderView { string Name {get;set;} int Amount {get;set;} void ShowMessage(string message); event VoidDelegate Cancel; event VoidDelegate Save; }

public interface IEmailService { bool SendEmail(string email, string text); }

Model View Presenter

Page 9: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

MVP public class OrderPresenter { private IEmailService service; private IOrderView view; public OrderPresenter(IEmailService service, IOrderView view) { this.view = view; this.service = service; view.Save += view_Save; }

void view_Save() { Order order = new Order(view.Name, view.Amount); if(order.Amount > 1000)

service.SendEmail("[email protected]", "Order amount > 1000");

//Process order... } }

Model View Presenter

Page 10: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

State-based тестирование

• Тестирование «чистых» функций

• Тестирование компонентов с малым числом зависимостей

• Тестирование компонентов обладающих «простыми состояниями»

Page 11: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

State-based тестирование

public class StateBasedUnitTest { public void DoTest() { Calculator calc = new Calculator(); int res = calc.Sum(10, 20); Assert.AreEqual(res, 30); } }

Page 12: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

К сожалению, Presenter…

• Не предоставляет «чистых функций»

• Будучи по своей природе «медиатором», зависит от большого числа компонентов

• Тестировать состояние Presenter-а абсолютно бесмысленое занятие

Page 13: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Пример тестового сценария

• Сотрудник вводит в форму «Создание заказа» название и стоимость заказа

• Пользователь нажимает кнопку «Сохранить заказ»• Если стоимость заказа превышает 1000 рублей, то

посылается email главному менеджеру для проверки заказа

• Заказ сохраняется в системе• Пользователю сообщается, что заказ успешно

сохранился в системе

Page 14: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

public void DoTest() {

MockRepository mocks = new MockRepository();

//Создание mock-объектов

IEmailService emailService = mocks.CreateMock<IEmailService>();

IOrderView view = mocks.CreateMock<IOrderView>();

//Начало записи сценария

view.Save += null;

IEventRaiser raiser = LastCall.IgnoreArguments().GetEventRaiser();

using(mocks.Unordered()) {

Expect.Call(view.Name).Return("Beer");

Expect.Call(view.Amount).Return("1001");

}

Expect.Call(emailService.SendEmail("", "")).IgnoreArguments();

Expect.Call(view.ShowMessage("")).IgnoreArguments();

//Проигрываем сценарий и проверяем соответствие записанному

mocks.ReplayAll();

OrderPresenter presenter = new OrderPresenter(emailService, view);

raiser.Raise();

mocks.VerifyAll();

}

Реализация interaction-based тестирования с RhinoMocks

Page 15: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

NUnitForms public void Test() { Form1 form = new Form1(); form.Show(); TextBoxTester tbxName = new TextBoxTester("Name2"); TextBoxTester tbxAmount = new TextBoxTester("Amount2"); ButtonTester btnOK = new ButtonTester("btnOk"); FormTester appForm = new FormTester("Form1"); ExpectModal("Message", delegate { MessageBoxTester messageBox = new MessageBoxTester("Message"); messageBox.ClickOk(); }); tbxName.Enter("Beer"); tbxAmount.Enter("1001"); btnOK.Click(); form.Dispose(); }

Page 16: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Windows PowerShell

Windows PowerShell™ — это новая командная оболочка Windows, разработанная в первую очередь для системных администраторов. Она включает интерактивную командную строку и среду исполнения сценариев.

Page 17: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Windows PowerShell

• Понятие командлета(сmdlet) в Windows PowerShell

• Создание своих командлетов на .Net

• Использование готовых библиотек Cmdlet-ов для автоматизации тестирования UI

Page 18: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Custom Cmdlets for UI Automation

Cmdlet Name Input Parameters Return Value / Effect

get-window windowName Handle to a top-level window

get-control handleParent, ctrlName Handle to a named control

get-controlByIndex handleParent, index Handle to a non-named control

send-chars handleControl, s Sends string s to a control

send-click handleControl Clicks a control

get-listBox handleControl, target Zero-based location of target

get-textBox handleControl Contents of TextBox as a string

send-menu mainIndex, subIndex Fires application menu command.

Page 19: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Windows PowerShell

# Test.ps1write-host "Start test"$testPassed = $trueinvoke-item 'TestApp.exe'[System.Threading.Thread]::Sleep(2000)#get handlers$app = get-window "TestApp"$tbxName = get-control $app "Name"$tbxAmout = get-control $app "Amount"$btnOk = get-control $app "Ok"#init formsend-chars $tbxName "Beer"send-chars $tbxAmout "1001"send-click $btnOk#...

#...#get message box[System.Threading.Thread]::Sleep(2000)$mBox = get-window "Message"if( $mBox –eq $null ) { write-host “Test failed” }else { write-host "`Test passed" }write-host "End test"# end script

Page 20: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Windows PowerShell

public class TestScript { public string CreatedBy{...} public string DateCreated{...} public int Priority{...} public string Tags{...} public int ExecutionTime{...} public int LastExecutionTime{...}}

[Cmdlet(VerbsLifeCycle.Start, "TestScripts")]public class ExecuteScripts : Cmdlet { ... private void executeScripts(TestScript[] scripts){...}}

[Cmdlet(VerbsCommon.Get, "TestScripts")]public class GetScripts : Cmdlet { ... private TestScript[] findScripts(string path){...}}

Page 21: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

PS C:\> Get-TestScripts –Path .\MyTests | Where-Object -FilterScript {($_.Tags -contains "Order") -or ($_. Tags -contains "Customer")} | Execute-TestScripts

PS C:\> Get-TestScripts –Path .\MyTests | Where-Object -FilterScript {($_. Tags -contains "Order")} | Sort-Object -Priority -Descending | Execute-TestScripts

PS C:\> Get-TestScripts –Path .\MyTests | Where-Object -FilterScript {($_.Tags -contains "Order") –and ($_.CreatedBy -eq “Maxim") } | Sort-Object -CreatedTime -Descending | Execute-TestScripts

Windows PowerShell

Page 22: Тестирование UI. Джентельменский набор MVP NUnit NUnitForms RhinoMocks(NMock) Windows PowerShell

Коротков Максим,

Finance Softwarewww.financesoftware.ru

email: [email protected]

Windows PowerShell