2012-05-10 46 views
8

在python中,我们如何为我们的类编写测试用例?例如:Python ...测试课程?

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) 

我知道有一种叫做单元测试的东西。但我不确定它是如何工作的。找不到我在网上理解的好解释。

+1

你的意思是[像这样](http://docs.python.org/library/unittest.html)? – 2012-05-10 00:18:19

回答

7

doctest是最简单的。测试写在docstring,看起来像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

"Testing Your Code" section of the Hitchhiker's Guide to Python讨论一般的测试实践/在Python方法,以及在更多或更少的日益复杂的顺序引入特定的工具。正如前面提到的,doctest是一个超级简单的开始方式...并且从那里开始,您可能希望转到unittest()以及之后。

我的经验是,doctest可以(也应该)用作前期的快速和肮脏的测试,但要小心过度 - 它可能导致模块用户可能不想看的长而丑陋的文档字符串特别是如果你在测试中详尽无遗并且包括各种各样的角落案例。将这些测试移植到像unittest()这样的专用测试框架是长远来看更好的做法。你可以在文档测试中留下基础知识,这样任何查看文档字符串的人都可以快速了解模块在实践中的工作原理。

+0

这不提供问题的答案。要批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论你自己的帖子,一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你会能够[评论任何帖子](http://stackoverflow.com/help/privileges/comment)。 – DaImTo

+1

我的回答如何比Mike的上面没有用?他所做的只是提供了unittest()模块文档的链接。我的链接为测试Python代码提供了一个更温和更彻底的描述,这正是我所了解的问题解答者所问的。 –