¿Cómo especifico una sola prueba en un archivo con nosetests?

Tengo un archivo llamado test_web.py que contiene una clase TestWeb y muchos métodos llamados test_something().

Puedo ejecutar todas las pruebas en la clase así:

$ nosetests test_web.py 
...
======================================================================
FAIL: checkout test
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/me/path/here/test_web.py", line 187, in test_checkout
...

Pero parece que no puedo ejecutar pruebas individuales. Estos me dan errores de "No existe tal prueba" cuando se ejecutan en el mismo PWD:

$ nosetests test_web.py:test_checkout
$ nosetests TestWeb:test_checkout

¿Qué podría estar mal aquí?

preguntado el 02 de julio de 12 a las 01:07

no puede ayudarlo a menos que pueda publicar sus casos de prueba o un SSCCE, acabo de probar la sintaxis que usaste con nose en mi máquina y funcionó bien. -

6 Respuestas

Debes especificarlo así: nosetests <file>:<Test_Case>.<test_method>o

nosetests test_web.py:TestWeb.test_checkout

Ver los docs

Respondido 02 Jul 12, 01:07

¿Por qué diablos la biblioteca usa ':' en lugar de '.'? ;) - omikron

¿Quizás para facilitar la delimitación entre un módulo y una clase? - Chris

@omikron cuando especifiqué el archivo no tuve ningún error de importación - gabeio

Wow, eso es terrible, las bibliotecas clásicas de python, no se preocupan por las interfaces existentes: novios

También puede especificar un módulo:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

Respondido 20 ago 13, 11:08

No sé si es una versión diferente de Python o nosetests o qué, pero esa sintaxis falla. Qué el trabajo, sin embargo, es: nosetests tests/test_integration:IntegrationTests.test_user_search_returns_users, es decir, archivos de referencia como archivos, no como módulos de Python, utilizando / más bien que . - Dwanderson

@dwanderson ambos usos deberían funcionar, según nose.readthedocs.io/en/latest/usage.html#selecting-tests. Su falla podría ser causada por tests no ser un módulo en su configuración? - migueljoseph

Ahh, así es, se me olvidó un __init__.py en la tests directorio. ¡Bien hecho! Gracias - Dwanderson

Especificar nombres en la línea de comando como sugieren las otras respuestas funciona y es útil. Sin embargo, cuando estoy escribiendo pruebas, a menudo descubro que quiero ejecutar solo la prueba en la que estoy trabajando, y los nombres que tendría que escribir en la línea de comando se vuelven bastante largos y engorrosos de escribir. . En tal caso, prefiero usar un decorador y una bandera personalizados.

Yo defino wipd ("decorador de trabajo en progreso") así:

from nose.plugins.attrib import attr
def wipd(f):
    return attr('wip')(f)

Esto define a un decorador @wipd que establecerá el wip atributo en los objetos que decora. Por ejemplo:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

Entonces -a wip se puede usar en la línea de comando para limitar la ejecución de la prueba a las marcadas con @wipd.

Nota sobre los nombres...

Estoy usando el nombre @wipd para el decorador en lugar de @wip para evitar este tipo de problema:

import unittest
class Test(unittest.TestCase):

    from mymodule import wip    
    @wip
    def test_something(self):
        pass

    def test_something_else(self):
        pass

El import hará el wip decorador un miembro de la clase y todos las Se seleccionarán las pruebas en la clase. El attrib El complemento verifica la clase principal de un método de prueba para ver si el atributo seleccionado también existe allí, y los atributos creados y probados por attrib no existen en un espacio segregado. Así que si pruebas con -a foo y tu clase contiene foo = "platypus", entonces todas las pruebas en la clase serán seleccionadas por el complemento.

Respondido 08 Jul 16, 16:07

Para ejecutar múltiples pruebas específicas, simplemente puede agregarlas a la línea de comando, separadas por espacios.

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout

contestado el 22 de mayo de 17 a las 10:05

En mis pruebas especificar pruebas con nombres de módulos no funciona

Debe especificar la ruta real a la .py:

nosetests /path/to/test/file.py:test_function

Esto con nose==1.3.7

Respondido el 14 de junio de 18 a las 15:06

Mi requisito era ejecutar una sola prueba en un archivo de prueba que estaba en otro ventanas directorio - esto se hizo desde el línea de comandos de anaconda como sigue:

corrió pruebas de nariz desde:

(base) C:\Users\ABC\Documents\work\

pero test_MyTestFile.py y métodosArchivo.py estaban en:

 (base) C:\Users\ABC\Documents\work\daily\

ejecutar una sola prueba por incluyendo camino con citas como sigue:

(base) C:\Users\ABC\Documents\work>nosetests "daily\\test_MyTestFile.py:MyTestClass.test_add_integers"

test_MyTestFile.py se veía así:

import methodsFile
import unittest

class MyTestClass(unittest.TestCase):

    def test_add_integers(self):
        assert methodsFile.add(5, 3) == 8

    def test_add_integers_zero(self):
        assert methodsFile.add(3, 0) == 3

métodosArchivo.py se veía así:

def add(num1, num2):
        return num1 + num2

Respondido el 23 de Septiembre de 19 a las 15:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.