2012-07-22 21 views
6

Estoy trabajando en un módulo usando sockets con cientos de casos de prueba. Lo cual es bueno. Excepto que ahora necesito probar todos los casos con y sin socket.setdefaulttimeout (60) ... Por favor, no me diga cortar y pegar todas las pruebas y establecer/eliminar un tiempo de espera predeterminado en configuración/desmontaje.pruebas de unidad python con configuraciones múltiples?

Honestamente, entiendo que tener cada caso de prueba presentado por sí mismo es una buena práctica, pero tampoco me gusta repetirlo. Esto es realmente solo probar en un contexto diferente, no en diferentes pruebas.

veo que unittest admite configuraciones de configuración/desmontaje de nivel de módulo, pero no me resulta obvio cómo convertir mi único módulo de prueba en pruebas dos veces con dos configuraciones diferentes.

cualquier ayuda sería muy apreciada.

Respuesta

4

Las otras respuestas sobre esta cuestión son válido en la medida en que hacen posible realizar las pruebas en múltiples entornos, pero al jugar con las opciones creo que me gusta un enfoque más autónomo. Estoy usando suites y resultados para organizar y mostrar los resultados de las pruebas. Para ejecutar una prueba con dos entornos en lugar de dos pruebas, tomé este enfoque: crear una subclase TestSuite.

class FixtureSuite(unittest.TestSuite): 
    def run(self, result, debug=False): 
     socket.setdefaulttimeout(30) 
     super().run(result, debug) 
     socket.setdefaulttimeout(None) 
... 
suite1 = unittest.TestSuite(testCases) 
suite2 = FixtureSuite(testCases) 
fullSuite = unittest.TestSuite([suite1,suite2]) 
unittest.TextTestRunner(verbosity=2).run(fullSuite) 
4

lo haría así:

  1. hacer todas sus pruebas se derivan de su propia clase TestCase, llamémoslo SynapticTestCase.

  2. En SynapticTestCase.setUp(), examine una variable de entorno para determinar si se establece el tiempo de espera del socket o no.

  3. Ejecute su conjunto de pruebas completo dos veces, una vez con la variable de entorno establecida de una manera, y luego con la que se establece en el otro sentido.

  4. Escriba un pequeño script de shell para invocar el conjunto de pruebas de ambas formas.

+0

esto suena bien, pero tiene que ejecutarse de forma automática con y sin un tiempo de espera predeterminado. – underrun

+0

Actualizado: use un script de shell o pequeño script de Python para ejecutar las pruebas en ambos sentidos. –

1

Si el código no llama socket.setdefaulttimeout a continuación, puede ejecutar las pruebas de la siguiente manera:

import socket 
socket.setdeaulttimeout(60) 
old_setdefaulttimeout, socket.setdefaulttimeout = socket.setdefaulttimeout, None 
unittest.main() 
socket.setdefaulttimeout = old_setdefaulttimeout 

Es un truco, pero puede funcionar

+0

esto funciona para probarlo con el tiempo de espera predeterminado, pero no sin él. Necesito probar todas las pruebas en ambos sentidos – underrun

+0

Luego simplemente agregue 'socket.setdefaulttimeout (OTHER_VALUE); unittest.main() 'hasta el final. –

Cuestiones relacionadas