web-dev-qa-db-fra.com

Existe-t-il un python équivalent pour que RSpec fasse TDD?

Je recherche un framework de test comme Ruby RSpec pour faire du développement piloté par les tests en Python. L'avantage d'un framework comme RSpec est qu'il offre un DSL qui se prête bien au TDD. D'abord, vous décrivez le test en anglais, puis vous écrivez le test, et quand il échoue, vous obtenez un message indiquant quel test a échoué avec votre belle description de ce que le test essaie de faire.

Jusqu'à présent, j'ai regardé PyTest et Nose. PyTest semble plus proche du MiniTest de Ruby que RSpec. Au lieu d'offrir une DSL avec un langage pour la faire lire comme des spécifications, elle se concentre sur les assertions. Nose ressemble à un wrapper sur PyTest qui n'ajoute pas son propre DSL.

Y a-t-il une autre option qui me manque? Ou suis-je en train de mal utiliser PyTest et Nose? La communauté Python a-t-elle choisi une manière totalement différente de le faire et je devrais arrêter d'essayer de le faire comme Ruby? Il ne semble pas, sur la base du nombre d'étoiles sur GitHub, que le la communauté a vraiment oint l'une de ces options comme cadre de test préféré.

26
williamcodes

Mamba + s'attend à ce que je me rapproche le plus d'une brève recherche sur Google:

12
Torben Knerr

J'adore Rspec! Sur python, je vais utiliser un plugin py.test appelé spec: https://pypi.python.org/pypi/pytest-spechttps://github.com/ pchomik/pytest-spec

Il utilise unittest, le package par défaut python, plus pytest et lui-même. Lors du clonage du projet dans mon python 2.7 installation conda OSX 10.11, j'ai pu exécuter ses propres tests, et cela a bien fonctionné!

Le format est simple, mais il comprend les éléments de base: un nom de groupe, le statut réussite/échec/ignorer, et le nom du test écrit avec des espaces au lieu de traits de soulignement. Voici quelques résultats de leurs propres tests, qui me semblent simples à suivre par moi-même.

    $ py.test --spec
================================ test session starts =================================
platform darwin -- Python 2.7.11, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /Users/ME/src/pytestspec, inifile: setup.cfg
plugins: spec-1.0.1, testinfra-1.4.1
collected 30 items 

test/test_patch.py::TestPatch
    [PASS]  Pytest runtest logreport honors capitalization of words in test name
    [PASS]  Pytest runtest logreport marks method marked by double underscores
    [PASS]  Pytest runtest logreport prints class name before first test result
    [PASS]  Pytest runtest logreport prints test name and failed status
    [PASS]  Pytest runtest logreport prints test name and handle only single marker
    [PASS]  Pytest runtest logreport prints test name and passed status
    [PASS]  Pytest runtest logreport prints test name and skipped status
    [PASS]  Pytest runtest logreport returns none when letter is missing
    [PASS]  Pytest runtest logreport returns none when nodeid is wrong formatted
    [PASS]  Pytest runtest logreport returns none when Word is missing
    [PASS]  Pytest runtest logreport skips empty line for first test
    [PASS]  Pytest runtest logstart returns none

test/test_plugin.py::TestPlugin
    [PASS]  Pytest adoption adds spec option
    [PASS]  Pytest adoption gets general group
    [PASS]  Pytest configure reloads pytest after patching
    [PASS]  Pytest configure should not reload configuration

test/test_replacer.py::TestPatcher
    [PASS]  Logstart replacer returns result of pytest runtest logstart method
    [PASS]  Report replacer returns result of pytest runtest logreport method

test/test_formats/test_functions.py
    [PASS]  Some function returns none
    [PASS]  Some function single underscore as prefix
    [PASS]  Some function single underscore as suffix

test/test_formats/test_methods.py::TestFormats
    [PASS]  Some method returns none
    [PASS]  Some method single underscore as suffix
    [PASS]  Some method single underscore as prefix

test/test_results/test_as_class.py::TestResults
    [SKIP]  Some method return none
    [SKIP]  Some method returns false
    [PASS]  Some method returns true

test/test_results/test_as_functions.py
    [PASS]  Some method returns true
    [SKIP]  Some method returns false
    [SKIP]  Some method return none

======================== 26 passed, 4 skipped in 0.14 seconds ========================
9
AnneTheAgile

http://pythonhosted.org/behave/

Il s'agit d'une solution au développement basé sur le comportement en python. Pourrait aider.

3
Ravi Sankar Raju

Il y a aussi https://testinfra.readthedocs.io/en/latest/ si vous pouvez utiliser servespec qui, selon le site Web, dit

Testinfra vise à être un équivalent Serverspec dans python et est écrit comme un plugin pour le puissant moteur de test Pytest

Je préfère de loin faire python mais je dois faire face à Ruby. C'est La Vie.

2
anotherNerdHere