¿A dónde van las pruebas unitarias de Python? [cerrado]

Resuelto readonly asked hace 16 años • 0 respuestas

Si estás escribiendo una biblioteca o una aplicación, ¿a dónde van los archivos de prueba unitaria?

Es bueno separar los archivos de prueba del código principal de la aplicación, pero es incómodo colocarlos en un subdirectorio "pruebas" dentro del directorio raíz de la aplicación, porque dificulta la importación de los módulos que probará.

¿Existe una mejor práctica aquí?

readonly avatar Sep 14 '08 12:09 readonly
Aceptado

Para un archivo module.py, normalmente se debe llamar a la prueba unitaria test_module.py, siguiendo las convenciones de nomenclatura de Pythonic.

Hay varios lugares comúnmente aceptados para colocar test_module.py:

  1. En el mismo directorio que module.py.
  2. En ../tests/test_module.py(al mismo nivel que el directorio de códigos).
  3. En tests/test_module.py(un nivel debajo del directorio de códigos).

Prefiero el número 1 por su simplicidad para encontrar las pruebas e importarlas. Cualquiera que sea el sistema de compilación que esté utilizando, puede configurarse fácilmente para ejecutar archivos que comiencen con test_. En realidad, el patrón predeterminado unittestutilizado para el descubrimiento de pruebas estest*.py .

user6868 avatar Sep 15 '2008 12:09 user6868

Sólo 1 archivo de prueba

Si solo hay 1 archivo de prueba, se recomienda colocarlo en un directorio de nivel superior:

module/
    lib/
        __init__.py
        module.py
    test.py

Ejecute la prueba en CLI

python test.py

Muchos archivos de prueba

Si tiene muchos archivos de prueba, colóquelos en una testscarpeta:

module/
    lib/
        __init__.py
        module.py
    tests/
        test_module.py
        test_module_function.py
# test_module.py

import unittest
from lib import module

class TestModule(unittest.TestCase):
    def test_module(self):
        pass

if __name__ == '__main__':
    unittest.main()

Ejecute la prueba en CLI

# In top-level /module/ folder
python -m tests.test_module
python -m tests.test_module_function

Usarunittest discovery

unittest discoveryEncontrará todas las pruebas en la carpeta del paquete.

Crear una carpeta __init__.pyentests/

module/
    lib/
        __init__.py
        module.py
    tests/
        __init__.py
        test_module.py
        test_module_function.py

Ejecute la prueba en CLI

# In top-level /module/ folder

# -s, --start-directory (default current directory)
# -p, --pattern (default test*.py)

python -m unittest discover

Referencia

  • pytestBuenas prácticas para el diseño de pruebas.
  • unittest

Marco de prueba unitaria

  • nariz
  • nariz2
  • pytest
Steely Wing avatar Apr 30 '2014 10:04 Steely Wing

Una práctica común es colocar el directorio de pruebas en el mismo directorio principal que su módulo/paquete. Entonces, si su módulo se llamara foo.py, el diseño de su directorio se vería así:

parent_dir/
  foo.py
  tests/

Por supuesto que no hay una única forma de hacerlo. También puede crear un subdirectorio de pruebas e importar el módulo usando la importación absoluta .

Dondequiera que coloques tus pruebas, te recomendaría que uses nose para ejecutarlas. Nariz busca pruebas en sus directorios. De esta manera, puede realizar pruebas donde tengan más sentido desde el punto de vista organizativo.

Cristian avatar Sep 14 '2008 06:09 Cristian

Tuvimos la misma pregunta al escribir Pythoscope ( https://pypi.org/project/pythoscope/ ), que genera pruebas unitarias para programas Python. Encuestamos a las personas en la lista de pruebas en Python antes de elegir un directorio, hubo muchas opiniones diferentes. Al final elegimos poner un directorio de "pruebas" en el mismo directorio que el código fuente. En ese directorio generamos un archivo de prueba para cada módulo en el directorio principal.

Paul Hildebrandt avatar May 02 '2009 17:05 Paul Hildebrandt