[英]python testing user input and output
如何测试该函数,该函数接受一个整数列表,并返回通过恰好相加四个整数而获得的最小值,并返回通过恰好相加四个整数而再次获得的最大值(该函数运行良好)。 感谢您提供的任何支持。
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)
您的代码难以测试,因为您混合了计算和交互(在这种情况下为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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.