for "Behavior Driven Development" (BDD) -- a client-facing scripting language to put the squeeze on all your features
Project description
Morelia viridis is a Python Behavior Driven Development platform, conceptually derived from Ruby’s Cucumber Framework.
It is available both at the cheeseshop and GitHub.
Mascot:
Installation
sudo pip install Morelia
Quick usage guide
Write feature description:
# calculator.feature
Feature: Addition
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers
Scenario: Add two numbers
Given I have powered calculator on
When I enter 50 into the calculator
And I enter 70 into the calculator
And I press add
Then the result should be 120 on the screen
Create standard python’s unittest and hook Morelia in it:
# test_acceptance.py
import unittest
from morelia import Parser
class CalculatorTestCase(unittest.TestCase):
def test_addition(self):
Parser().parse_file('calculator.feature').evaluate(self)
Run test exaclty like your regular tests. Here’s raw unittest example:
python -m unittest -v test_acceptance
And you’ll see which steps are missing:
F
======================================================================
FAIL: test_addition (__main__.CalculatorTestCase)
Addition feature
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_acceptance.py", line 43, in test_addition
Parser().parse_file('calculator.feature').evaluate(self)
File "/.../morelia/base.py", line 184, in evaluate
self.rip(step_matcher_visitor)
File "/.../morelia/base.py", line 198, in rip
visitor.after_feature(node)
File "/.../morelia/visitors.py", line 117, in after_feature
self._suite.fail(diagnostic)
AssertionError: Cannot match steps:
def step_I_have_powered_calculator_on(self):
ur'I have powered calculator on'
# code
pass
def step_I_enter_50_into_the_calculator(self):
ur'I enter 50 into the calculator'
# code
pass
def step_I_enter_70_into_the_calculator(self):
ur'I enter 70 into the calculator'
# code
pass
def step_I_press_add(self):
ur'I press add'
# code
pass
def step_the_result_should_be_120_on_the_screen(self):
ur'the result should be 120 on the screen'
# code
pass
Now implement steps:
# test_acceptance.py
import unittest
from morelia import Parser
class CalculatorTestCase(unittest.TestCase):
def test_addition(self):
Parser().parse_file('calculator.feature').evaluate(self)
def step_I_have_powered_calculator_on(self):
ur'I have powered calculator on'
self.stack = []
def step_I_enter_a_number_into_the_calculator(self, number):
ur'I enter (\d+) into the calculator' # match by regexp
self.stack.append(int(number))
def step_I_press_add(self): # matched by method name
self.result = sum(self.stack)
def step_the_result_should_be_on_the_screen(self, number):
ur'the result should be {number} on the screen' # match by format-like string
assert int(number) == self.result
And run it again:
$ python -m unittest -v test_acceptance
test_addition (test_acceptance.CalculatorTestCase)
Addition feature ... ok
----------------------------------------------------------------------
Ran 1 test in 0.016s
OK
Note that Morelia does not waste anyone’s time inventing a new testing back-end just to add a layer of literacy over our testage. Steps are miniature TestCases. Your onsite customer need never know, and your unit tests and customer tests can share their support methods. The same one test button can run all TDD and BDD tests.
Look at example directory for a little more enhanced example.
Documentation
Full documentation is available at http://morelia.readthedocs.org/en/latest/index.html
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file Morelia-0.3.0.tar.gz
.
File metadata
- Download URL: Morelia-0.3.0.tar.gz
- Upload date:
- Size: 31.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f0f8a2e7d9676ebedc80aa441fd07cdccd657b632fc318889287fd7397672d9b |
|
MD5 | a6e812fac383404cead1d963e6b40aaf |
|
BLAKE2b-256 | 46517ef78ceba1a9c6d125e9366dc6b346c0cfa2c5bc7c2e9a5a0f88704c8e75 |
File details
Details for the file Morelia-0.3.0-py2.py3-none-any.whl
.
File metadata
- Download URL: Morelia-0.3.0-py2.py3-none-any.whl
- Upload date:
- Size: 33.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fd247de4c5bcb91babf1c882cbf817dc5721bae3b7a809942e3d0839c60b37f |
|
MD5 | 83c172c1025c7d0c097ff3889ba79b6c |
|
BLAKE2b-256 | f7bf4acb2d45352eaad20500437d80875b474677642f0dbb04c3bd42f24f84d3 |