Практикуючи BDD з пітоном [закрито]


133

Які найсучасніші рамки та інструменти, доступні для python для практичного розвитку поведінки? Особливо знайти подібні інструменти, як rspec та mocha для рубіну, було б чудово.


1
Потік "дозволяє писати тести у стилі BDD RSpec з мінімумом магії".
Карл Г

7
Тільки на ЗС є високоінформативним рівним "не конструктивним".
jeremyjjbrown

Відповіді:


38

Ян Бікінг рекомендує використовувати doctest для дизайну, керованого поведінкою:

Я особисто схильний використовувати глузування носа та порожнечі у стилі дизайну, керованого поведінкою. Зокрема, специфікаційний плагін для носа відмінно підходить для BDD.


7
Нещодавно Ендрю Беннетт написав пару публікацій про те, чому він вважає, що доктест зловживають. andrew.puzzling.org/diary/2008/O жовтня/
ddaa

4
Я думаю, що doctest насправді більше узгоджується з філософією BDD, коли ви ставитесь до нього так, як було призначено: ви починаєте писати про програмне забезпечення, а потім перекреслюєте це з прикладами, які також формують тести. Це було також описано як "розробка, орієнтована на документи" - справа в тому, щоб зосередити увагу на зовнішньому функціональному функціонуванні, а не на внутрішніх одиницях роботи. Я думаю , що традиція XUnit це жахливо на це робити.
ianb

48

Салат означає бути огірковим інструментом для пітона: http://lettuce.it/

Ви можете схопити джерело на веб-сайті github.com/gabrielfalcao/lettuce


Користувачі Windows, які розглядають салат, повинні знати, що під час написання, підтримка цієї ОС не є однозначною.
leonigmig

7
Будь-які користувачі, які мають намір вживати салат із джанго, повинні знати, що за замовчуванням він використовує вашу базу даних за замовчуванням для тестування. Цей цікавий вибір дизайну коштував мені однієї виробничої бази даних :(
Рейчел

3
Є кілька альтернатив для салату, наприклад, "Поведінка"; ось повідомлення в блозі, де вони порівнюють їх та виступають за поведінку .
driftcatcher

1
Завдяки @seafangs - Поведінка виглядає набагато керованою для великих проектів, ніж салат.
jamesc

Якщо ви використовуєте django, заощадіть собі час від використання салату, поточна версія 2.19 не працює з останньою django.
Джеймс Лін

46

Я дуже рекомендую вести себе .

Шукаючи клона Огірка для Python, я почав використовувати салат, але виявив це досить незграбно розробленою копією. Дуже непітонічно.

Тоді я виявив, що поводяться, і був дуже задоволений цим.


11
Я перейшов вести себе з салату, коли його поведінка за замовчуванням використання бази даних за замовчуванням для тестування в проекті django коштувало мені виробничої бази даних на живому сервері :( мені дуже подобається поводитися; я запустив проект, який веде django, щоб підключити його Рамка для тесту django github.com/rwillmer/django-behave
Рейчел

1
Я відчуваю ваш біль, також я рада, що ваші страждання сприяли процвітанню екосистеми джанго. ;-)
Джон Ван

1
Чи можу я використовувати поведінку без файлів функцій? У мене немає нетехнічних користувачів, тому написання їх - це для мене просто шум. Якщо хтось не може прочитати мою задану / коли /, то тести, у неї немає жодної справи.
jeremyjjbrown

29

Я рекомендую вам використовувати набір інструментів, розроблених для допомоги програмістам у практиці BDD та TDD. Цей набір інструментів складається з: pycukes , specloud , ludibrio і Should -dsl .

If-DSL дасть вам очікування, схожі на RSpec. Все, що ви можете зробити з API очікування RSpec, також повинен-dsl. Ви можете схопити останнюверсію від Github .

SpecLoud допомагає вам у виконанні BDD-подібних unittests. Ви можете встановити його, зробивши

pip install specloud

Людібріо - це бібліотека для тестових пар (Макети, Стуби та манекени). Встановити через

pip install ludibrio

А PyCukes - головний інструмент для BDD. Він запустить сценарії тощо. Знову ж таки,

pip install pycukes

Для отримання додаткової інформації, будь ласка, прочитайте документацію щодо інструментів на PyPi .


Знайшов цей корисний документ, шукаючи подробиці вашої відповіді: arxiv.org/pdf/1007.1722
amit

Мені подобається слід-DSL. Я розглядав DSL для python BDD - їх небагато, цей здається досить виразним.
Danny Staple

Я не в змозі знайти жодної інформації про рамки BDD під назвою Pyramid. Посилання, на яке посилається @phaedrus, приводить до сумнівно виглядає сайту, який не має нічого спільного з тестуванням, і Google вказує на Pyramid , веб-рамку. Чи може хтось надати актуальне посилання?
Björn Pollex

1
Я вважаю за краще впевнене твердження DSL.
fatuhoku

@ BjörnPollex, ім'я Піраміди не вдалося використати творцями цих інструментів через веб-рамку Pyramid. Тепер вони лише окремі інструменти.
Дуглас Камата

11

Чудовий пост та відповіді. Просто хотів оновити, щоб включити Freshen до цього списку, коли я читав pycukes припинено. Хороший пост про використання BDD та Django з Freshen є тут .


9

Ви можете використовувати "sure" для виразних тверджень (як і в RSpec)


Парабени! Ви повністю підірвали мій розум кодом у magic.py. Я не мав уявлення про те, що в Python можливі «методи розширення» (відкриті класи).
mdwhatcott

8

Проект Pyccuracy - це спроба забезпечити для BDD мови Python мову, що відповідає специфіці домену.

На відміну від doctest, який працює на рівні API, він кодує операції вищого рівня, такі як завантаження веб-сторінки та подання форми. Я не використовував його, але це виглядає дещо перспективно, якщо саме це ви шукаєте.


6

Мені дуже подобається Pyccuracy . Я реалізую це над середнім проектом сьогодні.


3
Мені було б цікаво будь-яке нещодавнє порівняння Pyccuracy vs салату, яким би хто міг поділитися.
michela

Можливо, включіть у порівняння також Freshen (пов'язаний у відповіді вище).
amit

Вже запитав тут: quora.com / ...
Amit

6

Спробуйте Pyspecs . Зробити тести, які легко читати та постійно виконувати під час розробки, були двома моїми основними цілями у створенні цього проекту.

Код тесту:

from pyspecs import given, when, then, and_, the, this

with given.two_operands:
    a = 2
    b = 3

    with when.supplied_to_the_add_function:
        total = a + b

        with then.the_total_should_be_mathmatically_correct:
            the(total).should.equal(5)

        with and_.the_total_should_be_greater_than_either_operand:
            the(total).should.be_greater_than(a)
            the(total).should.be_greater_than(b)

    with when.supplied_to_the_subtract_function:
        difference = b - a

        with then.the_difference_should_be_mathmatically_correct:
            the(difference).should.equal(1)

Вихід консолі:

# run_pyspecs.py

  |  given two operands 
  |    when supplied to the add function 
  |      then the total should be mathmatically correct 
  |      and the total should be greater than either operand 
  |    when supplied to the subtract function 
  |      then the difference should be mathmatically correct 

(ok) 6 passed (6 steps, 1 scenarios in 0.0002 seconds)

4

Я, напевно, повністю пропускаю суть, але те, що я зберіг у первинному документі BDD, - це те, що BDD було перекомплектовано TDD, щоб підкреслити деякі найкращі практики.

Якщо моя інтерпретація правильна, ви можете отримати рамку BDD, просто перейменувавши методи в будь-якій реалізації xUnit . Тому просто продовжуйте використовувати стандартний тест бібліотеки .

EDIT: Швидкий google з’явив модуль Behavior в Cheese Shop . Подальші пошуки BDD там не знайшли нічого іншого.


TDD справді є революційною практикою в абсолютно іншому масштабі, ніж BDD. І все-таки я оцінив спосіб написання тестового керування у стилі BDD.
JtR

1
BDD розпочався на рівні одиниці, це правда. Вона зростала досить швидко, охоплюючи поведінку на рівні системи, де контексти, події та результати отримують користь від трохи більшої повторної використання - отже, поширення інструментів для підтримки як тих, так і природних мовних сценаріїв, взятих під час розмов з нетехнічними зацікавленими сторонами. Оскільки це питання було задано, ми підняли BDD до рівня бачення проекту, використовуючи Feature Injection, з таким же акцентом на відкриття через розмову та мову домену. Ще нічого нового під сонцем.
Lunivore

Мені подобається ця розмова про bdd youtube.com/watch?v=pherUEzdJow . Я показую хороший спосіб написати технічні характеристики і мати це як тести.
aisbaa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.