2012-10-09 42 views
5

He escrito una secuencia de comandos python que toma argumentos de línea de comandos y reproduce una ronda de Tic Tac Toe.
funcionamiento se parece a esto ...python, unittest, prueba una secuencia de comandos con línea de comando args

plazo ttt o # xo ## x ## x 0 1

Si el movimiento es legal entonces se imprime el nuevo diseño de la placa y si alguien ganó el juego

Tengo que escribir pruebas para ello usando unittest. No sé cómo probar todo el script con varios parámetros de línea de comandos, todos los ejemplos que he visto parecen simplemente probar funciones individuales dentro del script. También la secuencia de comandos usa argparse para analizar los parámetros

¡Gracias!

+1

[Pruebas de unidad de escritura en Python: ¿cómo empiezo?] (Http://stackoverflow.com/questions/3371255/writing-unit-tests-in-python-how-do-i-start) –

+0

@Pedro Sí, he estado leyendo esas cosas, pero todo parece tratarse de funciones de prueba. No sé si es posible probar un guión completo con parámetros de línea de comando. ¿Al menos alguien puede decir si es posible? –

+0

Éste puede ser más en la línea de lo que está buscando: [Probar secuencias de comandos de Python] (http://stackoverflow.com/questions/5974557/testing-python-scripts). –

Respuesta

10

Refactor su programa para que su acción principal (menos el argparsing) ocurre en una función "principal":

def main(args): 
    ... 

if __name__ == '__main__': 
    args = parse_args() 
    main(args) 

entonces usted puede escribir pruebas para el comportamiento de main y parse_args.

PS. Es posible utilizar el módulo subprocess para llamar a su programa como un proceso externo y luego analizar el resultado, pero creo que sería más feo e innecesario.

PPS. Como beneficio adicional de escribir su programa de esta manera, podrá importar su programa como un módulo y llamar a su función principal en otros scripts. Eso podría ser útil si, por ejemplo, un día le gustaría construir una GUI para ello.

+0

Esto funciona si tiene un script con solo un punto final de línea de comandos (que es el caso de OP). Si tiene múltiples puntos finales, deberá usar una estrategia diferente. –

Cuestiones relacionadas