1、用指定的txt文本文件形式读取二维列表
2、对列表数组进行最大连续子数组之和的计算
3、对最大连续子数组方法进行单元测试和代码覆盖率测试
4、分析单元测试以及代码覆盖率。
求二维列表最大子数组(我们要求二维数组的子数组必须是矩形的,如下图)
实现的Python源代码如下
class SumMaxNum(): def function(self,lists):#一维列表最大子数组之和 max_sum = lists[0] pre_sum = 0 for i in lists: if pre_sum < 0: pre_sum = i else: pre_sum += i if pre_sum > max_sum: max_sum = pre_sum return max_sum def RectangelSum(self,m):#二维列表最大矩形子数组之和 ‘‘‘算法思想: 依次让每一个数据和右边相加比较后取大,在和 ‘‘‘ maxsum = 0 for top in range(0, len(m)):#遍历子表个数 for left in range(0, len(m[0])):#遍历子表元素 for bottom in range(top, len(m)):#从上到下 for right in range(left, len(m[0])):#从左到右 thissum = 0 for row in range(top, bottom+1): for col in range(left, right+1): thissum += m[row][col] maxsum = max(thissum, maxsum)#取每次求和的较大者 return maxsum def readtxt(self, txt): ‘‘‘读文件操作‘‘‘ data = list() flag = 0 for line in open(txt, ‘r‘): flag = flag + 1 if flag > 2:#1,2行表示几行几列,二位列表从第3行开始 data.append(list(map(int, line.strip(",\n").split(",")))) return data
if __name__ == ‘__main__‘:
a = SumMaxNum()
print(a.function([-2, 6, -1, 5, 4, -7, 2, 3]))
print(a.readtxt("a.txt"))
print(a.RectangelSum(a.readtxt("a.txt")))
其中a.txt文件如下:
3,6分别表示3行6列。
运行的结果:
在PyCharm的需要测试文件的当前目录选择new --> python file --> python unit test,然后确认 ,如图
之后,导入需要测试类或者函数,编写测试组。本文档测视组如3.2
单元测试源码:
import unittest from Sum import SumMaxNum class MyTestCase(unittest.TestCase): def test_something(self): self.assertEqual(True, False) def test1(self): ts = SumMaxNum() return self.assertEqual(ts.function([-2, 6, -1, 5, 4, -7, 2, 3]), 14) def test2(self): ts = SumMaxNum() return self.assertEqual(ts.RectangelSum(ts.readtxt("a.txt")),28) def test3(self): ts = SumMaxNum() return self.assertEqual(ts.RectangelSum(ts.readtxt("a.txt")),27)#错误组,测试列举错误 if __name__ == ‘__main__‘: suite = unittest.TestSuite() suite.addTest(MyTestCase(‘test1‘)) suite.addTest(MyTestCase(‘test2‘)) suite.addTest(MyTestCase(‘test3‘)) runner = unittest.TextTestRunner() runner.run(suite) import cProfile//需要pip命令安装, cProfile.run("SumMaxNum().RectangelSum(SumMaxNum().readtxt(‘a.txt‘))")//测试效能
结果:
文字解释:
注意:PyCharm后面简称PC
Coverage作为Python的一个第三方库,使用时需要先安装,使用pip命令进行安装。
安装命令:pip install coverage,当然PC也可以通过file目录下的seting加入,如图中的“+”号.
然后搜索coverage,然后install Package,便配置好了coverage。
在PC的Terminal下输入coverage run SumTest.py(我的测试文件是SumTest.py,这里需要输入自己需要测试的文件),
然后运行,就会在自己测试的.py文件的同级目录下生成一个.coverage文件和,如图
由结果可以得知,执行的SumTest.py文件,代码覆盖率是95%
结果展示中的字段含义:
tmts:语句总数
Miss:未执行到的语句数
Cover:覆盖率,计算公式 Cover=(Stmts-Miss)/Stmts
使用命令生成HTML报告:coverage html -d covhtml
其中参数-d是指定生成的html所在的文件夹名,命令执行完成后会生成一个covhtmll文件夹
直接在浏览器中打开covhtml文件假中的index.html文件查看代码覆盖率
结果可以得知,执行的SumTest.py文件,代码覆盖率是95%,和上面的使用命令:coverage report查看报告一样。
在浏览器中直接打开Sum.py文件,可高亮显示未覆盖的代码行,以及文件的统计数据。
同样打开SumTest.py文件也可以查看单元测试代码的覆盖情况
对于PyCharm的代码单元测试与测试覆盖率有什么不懂之处,欢迎评论留言询问,作者会及时回应,如有不足之处,请多多指教!
原文:https://www.cnblogs.com/lengend/p/14604531.html