Как да започнете с TDD с помощта на Winforms

Наскоро прочетох/гледах толкова много за TDD & BDD, че наистина искам да ги овладея. Бил съм разработчик, който само пише код и след това го тества отвън (както винаги сме започвали). Проблемът изглежда е в стартирането и работата с TDD. Искам просто да създам просто приложение Winform, в което искам да покажа списък с нещо, да кажем продукти. Просто не знам от къде да започна, да пиша ли първо тест за контролер? контролерът се нуждае от справка за преглед и обслужване и така нататък и така нататък. ASP.Net MVC е създаден за тестване, следователно е малко лесно да започнете, но Winforms са истинска болка. Моля, дайте ми няколко видеоклипа (най-предпочитани), които показват TDD в Winforms.

Гледал съм много видеоклипове, които ви показват как тествате клас или функция, но как да тествате потребителски интерфейс, който не поддържа тестване?

Накратко, искам да знам, ако някой е правил TDD за известно време, как той/тя го прави в Winforms?

Написах купища кодове, които просто изтрих, защото заседнах. Моля, помогнете!


person Afraz Ali    schedule 06.02.2013    source източник


Отговори (3)


Ето как го правя за всякакъв вид потребителски интерфейс, било то Web или Winforms или WPF или Swing в Java или дори интерфейс на уеб услуга, който ще се използва от друга система.

  • Напишете потребителския интерфейс и твърдо кодирайте всички данни зад него.
  • Напишете контролер и преместете твърдо кодираните данни в контролера. Контролерът просто трябва да представя данните във форма, която потребителският интерфейс може да разбере.

Вашият контролер вече няма поведение; просто статични данни - но има правилния API за потребителския интерфейс и сега знаете как потребителският интерфейс иска да го използва.

  • Напишете пример, който показва как потребителският интерфейс ще използва контролера в най-основната форма.
  • Накарайте примера да работи.
  • Напишете друг пример, който показва как контролерът се държи по различен начин в различен контекст.
  • Накарайте примера да работи.

Това са вашите единични тестове! Ако знаете, че вашият контролер ще има нужда от други класове, с които да си сътрудничи, можете да се подиграете и с тях.

След като вашите сътрудници бъдат подигравани, вие вече знаете как администраторът иска да ги използва. Отново вече имате API за тези сътрудници, защото контролерът ги използва.

Това е, което правим, когато говорим за „отвън навътре“ в BDD.

person Lunivore    schedule 07.02.2013
comment
Благодаря на Lunivore за обратната връзка. Интересно е! Ще го пробвам. Това, което ми харесва във вашето решение, е да предприемете крачка и първо да напишете познатия код. След като овладея техниката, мога да възприема чиста техника за първи тест. Благодаря, отговорът ви е много полезен. - person Afraz Ali; 12.02.2013
comment
Е, никога не пиша модулни тестове за потребителски интерфейс - твърде много естетика. Но да, можете първо да напишете BDD сценарии, ако искате. Това е добро начало. Късмет! - person Lunivore; 12.02.2013

Аз също съм нов в TDD и също като теб се опитвам да уча. Ето какво измислих по време на моите търсения, може би ще помогне и на вас:

  1. Разгледайте уебсайта на Рой Ошеров, както и книгата му „Изкуството на модулното тестване". Разгледайте видеоклиповете, има някои страхотни, особено раздела „Програмиране по двойки“. Неговата книга беше най-добрата книга, която съм чел за модулно тестване и TDD, и единствената, която съм чел от кора до кора.
  2. Вижте някои TDD кати. Има някои на уеб страницата, която предложих в предишния елемент. Вижте как другите хора решават ката. Наистина е много полезно.
  3. Прочетете за инжектирането на зависимости.
  4. Ако искате да правите TDD в WinForms, вижте модела MVP. Доколкото знам, това е де факто моделът за разделяне на потребителския интерфейс от бизнес кода в WinForms.

Успех с търсенето.

person hattenn    schedule 09.02.2013
comment
Благодаря, hattenn, вашият принос е много ценен и сте посочили няколко страхотни видеоклипа и книга. Изключително полезно! Благодаря за вашия отговор. - person Afraz Ali; 12.02.2013

Контролерът е добра отправна точка. Извлечете View public api към интерфейс и тествайте взаимодействието на контролера с този интерфейс с помощта на Mocking Framework. Можете да направите същото и за сервизния слой. Освен това бих използвал подхода отдолу нагоре за това приложение и бих тествал модулите на слоевете от по-ниско ниво, преди да добавя тестове към слоя на потребителския интерфейс. На слоя на потребителския интерфейс ще напиша набор от тестове за приемане, използвайки BDD рамка и ще използвам подигравателни рамки, за да направя тези тестове леки и да намаля броя на тестовете.

Късмет!

person Ikaso    schedule 09.02.2013