Python ...测试类?

VPN*_*IME 12 python testing

在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)
Run Code Online (Sandbox Code Playgroud)

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

Ign*_*ams 9

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()
Run Code Online (Sandbox Code Playgroud)


Jef*_*ght 7

Hitchhiker的Python指南中"测试代码"部分讨论了Python中的一般测试实践/方法,以及以或多或少的复杂顺序引入特定工具.如前所述,doctest是一种超级简单的启动方式......从那里开始,您可能希望转向unittest()以及更远.

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

  • 我的答案如何不如迈克上面那么有用?他所做的就是提供一个指向unittest()模块文档的链接.我的链接提供了一个更温和,更全面的测试Python代码的描述,这是我所理解的问题提出者所要求的. (5认同)