在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)
我知道有一种叫做单元测试的东西。但我不确定它是如何工作的。找不到我在网上理解的好解释。
答案 0 :(得分: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()
答案 1 :(得分:6)
"Testing Your Code" section of the Hitchhiker's Guide to Python讨论了Python中的一般测试实践/方法,以及以或多或少的复杂顺序引入特定工具。如前所述,doctest是一种超级简单的开始方式......从那里开始,你可能希望转向unittest()以及更远。
我的经验是,doctest可以(而且应该)预先用作快速而肮脏的测试,但要小心过分 - 这会导致模块用户可能不想看到的长而丑陋的文档字符串特别是如果你在测试中详尽无遗并且包括各种角落案例。从长远来看,将这些测试移植到像unittest()这样的专用测试框架中是一种更好的做法。您可以在doctest中留下基础知识,这样任何查看文档字符串的人都可以快速了解该模块在实践中的工作原理。