example python ruby testing rspec tdd

python tdd example



¿Hay un equivalente de python para RSpec para hacer TDD? (4)

Estoy buscando un marco de prueba como el RSpec de Ruby para realizar un desarrollo basado en pruebas en Python. La ventaja de un marco como RSpec es que ofrece un DSL que se adapta bien a TDD. Primero, describe la prueba en inglés y luego escribe la prueba, y cuando falla, aparece un mensaje que indica qué prueba falló con su buena descripción de lo que la prueba está tratando de hacer.

Hasta ahora he mirado a PyTest y Nariz. PyTest parece más cercano a Ruby MiniTest que a RSpec. En lugar de ofrecer un DSL con lenguaje para que se lea como especificaciones, se enfoca en afirmaciones. La nariz parece una envoltura en PyTest que no agrega su propio DSL.

¿Hay otra opción que me falta? ¿O simplemente estoy haciendo un mal uso de PyTest y la nariz? ¿Se ha conformado la comunidad de Python con una forma totalmente diferente de hacer esto y debería dejar de intentar hacerlo como Ruby? No parece, según el número de estrellas en GitHub, que la comunidad realmente haya ungido cualquiera de estas opciones como el marco de prueba preferido.


¡Me encanta Rspec! En Python, voy a usar un plugin py.test llamado spec: https://pypi.python.org/pypi/pytest-spec https://github.com/pchomik/pytest-spec

Utiliza unittest, el paquete python predeterminado, más pytest y él mismo. Al clonar el proyecto en mi instalación de python 2.7 conda OSX 10.11, pude ejecutar sus propias pruebas, ¡y funcionó bien!

El formato es simple, pero incluye lo básico: un nombre de grupo, el estado de pasar / fallar / saltar, y el nombre de la prueba con espacios en lugar de guiones bajos. Aquí hay algunos resultados de sus propias pruebas, que me parecen simples de seguir por mi cuenta.

$ 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 ========================



También hay https://testinfra.readthedocs.io/en/latest/ si puede usar servepec que, según el sitio web, dice

Testinfra pretende ser un equivalente de Serverspec en python y está escrito como un complemento del potente motor de prueba Pytest

Prefiero estar haciendo python pero tengo que lidiar con ruby. Así es la vida.