2012-05-10 18 views
8

En python, ¿cómo escribimos casos de prueba para nuestras clases? Por ejemplo:Python ... clases de prueba?

class Employee(object): 
    num_employees = 0 


# numEmployess is incremented each time an employee is constructed 
    def __init__(self, salary=0.0, firstName="", lastName="", ssID="", DOB=datetime.fromordinal(1), startDate=datetime.today()): #Employee attributes 
    self.salary=salary 
    self.firstName = firstName 
    self.lastName = lastName 
    self.ssID = ssID 
    self.DOB = DOB 
    self.startDate = startDate 
    Employee.num_employees += 1 #keep this 

    def __str__(self): #returns the attributes of employee for print 
    return str(self.salary) + ', ' + self.firstName + ' ' + self.lastName + ', ' + self.ssID + ', ' + str(self.DOB) + ', ' + str(self.startDate) 

Sé que hay algo llamado pruebas unitarias. Pero no estoy seguro de cómo funciona en absoluto. No pude encontrar una buena explicación que entendí en línea.

+1

¿Quiere decir [como este] (http://docs.python.org/library/unittest.html)? –

Respuesta

7

doctest es el más simple. Las pruebas están escritas en el docstring, y se parecen a los episodios REPL.

... 

    def __str__(self): 
    """Returns the attributes of the employee for printing 

    >>> import datetime 
    >>> e = Employee(10, 'Bob', 'Quux', '123', startDate=datetime.datetime(2009, 1, 1)) 
    >>> print str(e) 
    10, Bob Quux, 123, 0001-01-01 00:00:00, 2009-01-01 00:00:00 
    """ 
    return (str(self.salary) + ', ' + 
      self.firstName + ' ' + 
      self.lastName + ', ' + 
      self.ssID + ', ' + 
      str(self.DOB) + ', ' + 
      str(self.startDate) 
      ) 

if __name__ == '__main__': 
    import doctest 
    doctest.testmod() 
2

El "Testing Your Code" section of the Hitchhiker's Guide to Python discute prácticas generales de prueba/metodologías en Python, así como introducir herramientas específicas con el fin más o menos cada vez más complejo. Como se mencionó anteriormente, doctest es una manera súper sencilla de comenzar ... y desde allí, es posible que desee pasar a unittest() y más allá.

Mi experiencia ha sido que doctest puede (y debe) usarse como una prueba rápida y sucia por adelantado, pero ten cuidado de exagerar: puede llevar a archivos largos y feos que los usuarios de tu módulo pueden no querer ver at, especialmente si eres exhaustivo en tus pruebas y estás incluyendo todo tipo de casos de esquina. Transmitir esas pruebas a un marco de prueba dedicado como unittest() es una práctica mejor a largo plazo. Puede dejar solo lo básico en su doctest para que cualquier persona que vea el docstring tenga una idea rápida de cómo funciona el módulo en la práctica.

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) lo hará poder [comentar cualquier publicación] (http://stackoverflow.com/help/privileges/comment). – DaImTo

+1

¿Cómo es mi respuesta menos útil que la anterior de Mike? Todo lo que hizo fue proporcionar un enlace a los documentos para el módulo unittest(). Mi enlace proporciona una descripción más suave y más exhaustiva de la prueba del código de Python, que es lo que entendí sobre la pregunta formulada. –