如何测试此函数,该函数接受一个整数列表,并返回通过恰好相加四个整数而获得的最小值,并返回通过恰好相加四个整数而再次获得的最大值(该函数运行良好) 。我将不胜感激。
def miniMaxSum(arr):
x = sum(arr)
print( (x-(max(arr))), (x-(min(arr))) )
if __name__ == '__main__':
arr = list(map(int, input().rstrip().split()))
miniMaxSum(arr)
答案 0 :(得分:0)
您的代码很难测试,因为您混合了计算和交互(在这种情况下为I / O操作)。例如,您的函数miniMaxSum
执行a)一些计算并b)打印结果。同样,您的main
a)将字符串转换为整数列表,b)执行输入操作。这使得使用自动化测试套件很难对这两个部分进行测试:您可以创建单元测试,但这需要您为I / O部分创建一些测试双打。
如果您清楚地将计算和交互分开,代码可能如下所示:
def miniMaxSum(arr):
x = sum(arr)
return ( (x-(max(arr))), (x-(min(arr))) )
def inputStringToNumbers(inputString):
token = inputString.rstrip().split()
numbers = list(map(int, token))
return numbers
if __name__ == '__main__':
inputString = input()
numbers = inputStringToNumbers(inputString)
mini, maxi = miniMaxSum(numbers)
print(mini, maxi)
然后,您可以非常轻松地为两个功能miniMaxSum
和inputStringToNumbers
创建测试,例如:
import miniMaxSum
import unittest
class TestMiniMaxSum(unittest.TestCase):
def test_miniMaxSum_withOneElementList_shallGiveZeroes(self):
actualResult = miniMaxSum.miniMaxSum([42])
self.assertTupleEqual((0,0), actualResult)
def test_miniMaxSum_withAandB_shallGiveAandB(self):
actualResult = miniMaxSum.miniMaxSum([42,56])
self.assertTupleEqual((42,56), actualResult)
def test_inputStringToNumbers_withEmptyString_shallGiveEmptyList(self):
actualResult = miniMaxSum.inputStringToNumbers("")
self.assertListEqual([], actualResult)
def test_inputStringToNumbers_withOneNumberStringt_shallGiveOneIntList(self):
actualResult = miniMaxSum.inputStringToNumbers("42")
self.assertListEqual([42], actualResult)
if __name__ == '__main__':
unittest.main()