2011-05-02 13 views
6

Estoy en una etapa de aprendizaje del uso de python como herramienta para el control de calidad del software.python doctest: el resultado esperado es el mismo que el resultado "obtenido", pero la prueba falló

Escribí la siguiente prueba simple para encontrar la letra 'a' en una matriz de número de archivo de texto. problema es que la prueba falla aunque la expectativa es igual a lo que obtuve.

¿Por qué es eso? ¿Puedes decirme qué estoy haciendo mal?

escritura de la prueba: Mensaje de

fin = open("abc.txt", "r") 

arr_fin = [] 

for line in fin: 
    arr_fin.append(line.split()) 

print arr_fin 

for row in arr_fin:  
    arr_fin_1 = " ".join('{0:4}'.format(i or " ") for i in row) 
    print arr_fin_1 



def find_letter(x, arr_fin_1): 
    """ 
    >>> find_letter('a', arr_fin_1) 
    97 
    """ 
    t=ord(x) #exchange to letter's ASCII value 
    for i in arr_fin_1: 
     if i==x: 
      print t 
      return; 

def _test(): 
    import doctest 
    doctest.testmod() 

if __name__ == "__main__": 
    _test() 

error:

Expected: 
    97 
Got: 
    97 
********************************************************************** 
1 items had failures: 
    1 of 1 in __main__.find_letter 
***Test Failed*** 1 failures. 
+0

+1 para la pregunta: este tipo de error es muy fácil de hacer: -/ –

Respuesta

2

Este:

return; 

hace que su función de retorno None.

¿Quizás quiso decir return t?


Además de eso, en mi humilde opinión doctest pruebas están destinados para ser autónomo. Esto es algo que el usuario debería ver en su documentación y entender sin contexto. En su ejemplo, está utilizando un objeto arr_fin_1 de módulo local que es completamente opaco para el usuario. Es mejor definirlo en el doctest antes de la llamada find_letter para proporcionar un ejemplo independiente.

+1

En realidad, en este caso, ya sea "imprimir t" o "devolver t" parece hacer que pase el doctest, siempre y cuando elimine espacio @Frank Schmitt mencionado. Tener tanto "print t" como "return t" hace que el archivo _falla_ sea 97 _twice_. –

+0

Pero estoy de acuerdo en que es un uso extraño de doctests (como yo lo entiendo, debe pensar en doctests como documentación que puede verificar, no como control de calidad en su software). Deben ser estrictamente autónomos y no depender del contexto externo. –

11

Tiene espacio adicional después del 97 - si lo quita, su prueba debería funcionar bien.

Cuestiones relacionadas