我是python新手,正在努力学习单元测试。我正在使用pytest对我的代码运行一些单元测试。类似于此示例的内容:
def test_calc_total():
total = mathlib.calc_total(4,5)
assert total == 9
我在这里可能不正确,但我了解到,为了使函数可测试,它必须返回一个值。所有单元测试都是这样吗
我发现我的大多数函数都无法测试,因为它们没有返回值。我正在创建一个票证跟踪系统,并将票证信息存储在一个数据框中。以下是TicketDF课程的一部分:
class TicketDF():
cwd = os.getcwd()
df = pd.DataFrame()
def __init__(self, configParser):
self.populateFilePaths(configParser)
self.populateAttributes(configParser)
self.populateTable()
def populateTable(self):
if self.doesFileExistAndNotEmpty(self.ticketCSVFilePath):
self.df = pd.read_csv(self.ticketCSVFilePath, converters={'Comments':literal_eval}) #, 'Attachments':literal_eval})
self.df.set_index('Ticket ID', inplace=True)
def populateAttributes(self, configParser):
self.ticketAttributes = configParser.getTicketAttributes()
def populateFilePaths(self, configParser):
self.ticketCSVFilePath = configParser.getTicketsCSVPath()
def doesFileExistAndNotEmpty(self, filepath):
if os.path.exists(filepath) and os.path.getsize(filepath) > 0:
return True
else:
return False
def getTicketDF(self):
return self.df
def addTicketToDF(self, data):
df = pd.DataFrame (data, columns = self.ticketAttributes)
df.set_index('Ticket ID', inplace=True)
self.df = self.df.append(df)
self.saveDFToCSV()
如您所见,大多数函数(即使未显示的函数)都没有返回值。编写代码以使所有函数都有返回值是最佳做法吗?或者有没有其他方法可以在没有返回值的情况下测试函数
不,它可能有副作用,你可以测试一下副作用
例如,考虑一个写入文件的函数。通过异常报告错误。它没有任何回报。单元测试将调用函数并检查相关文件是否已写入,以及引发各种异常
另一个示例是更改对象状态的方法调用。调用该方法并检查对象的状态是否已更改
简而言之,答案是否定的
测试函数取决于
因此,如果一个函数的行为改变了一个程序的状态,我们需要测试这个行为,那么我们需要能够访问被改变的状态部分来测试相应的行为。此类测试可能并不总是依赖于函数的返回值。因此,函数不需要返回可测试的值,但它们确实需要公开与需要测试的行为相关的信息
有关测试这方面的更多信息,请阅读关于测试加倍的文章。《xUnit测试模式》一书中关于间接输入和输出的“使用测试双精度”一章是一个很好的参考
相关问题 更多 >
编程相关推荐