**
Python测试函数与类 (一)—— python编程:从入门到实践
**
引言:
编写函数或类时,还可为其编写测试。通过测试,可确定代码面对各种输入都能够按要求的那样工作。测试让你信心满满,深信即便有更多的人使用你的程序,它也能正确地工作。在程序中添加新代码时,你也可以对其进行测试,确认它们不会破坏程序既有的行为。程序员都会犯错,因此每个程序员都必须经常测试其代码,在用户发现问题前找出它们。 —python编程:从入门到实践
写这一篇博客的时候我还在学校的机房上 python测试函数和类 的课程。致敬给我们教授知识的老师。 2021年10月25日 15:45
首先按照老师交给我的步骤来描述如何进行敲测试函数的代码思路:
"""
操作的步骤
1.先进行导入模块unittest
2.导入需要测试的类
3.再创建一个集成unittest.TestCase的类
4.再编写一系列方法对函数行为而不同方面进行测试
“”"
通俗地来说,我直接上操作了。首先呢,我先在pycharm上面创建一个文件包,然后在里面创建了一个叫做 hello 的 py 文件, 然后呢,我在这个hello.py文件里面创建了两个函数f1, f2。老铁们心理一定在吐槽我说这么多了,那么我就直接上图片和代码了!
hello.py的代码如下:
def f1(num_1, num_2):
return num_1 + num_2
def f2(num_1, num_2):
return num_1*num_2
然后呢,我就又在hello.py所在的package再新创建一个textE1.py文件,里面创建一个集成unittest.TestCase的类,通俗地来说就是在这里创建一个测试hello.py的代码的类,里面可以测试hello.py定义好的f1和f2类.这里有一些代码的格式。
还记得我刚开始就讲的那个步骤吧,这个是老师PPT上面的步骤,我觉得挺有用的,所以就按照这个步骤进行。(那么再看一遍这个步骤)
"""
操作的步骤
1.先进行导入模块unittest
2.导入需要测试的类
3.再创建一个集成unittest.TestCase的类
4.再编写一系列方法对函数行为而不同方面进行测试
“”"
第一步:
import unittest
第二步:
# import hello
# 上面的这种命名会显得有一点麻烦,因为在调用f1和f2的时候需要再写一次hello
# 意思就是每次调用f1和f2都要这样: hello.f1 hello.f2 感觉有一点麻烦呢
#为了每次调用都要hello.f1 hello.f2,于是我就直接写成了下面的这种格式
from hello import f1, f2
第三步:
这里我感觉是需要进行细说的,因为这个比前面的那两个步骤内容复杂了许多~
首先就是:重点!需要记忆它一定的格式的
代码如下:
class Hello_Text_Class(unittest.TestCase):
"""一个测试hello方法的类"""
#需要值得注意的是,必须是使用了**test**开头的def后面才会被unittest.main()进行自动的运行
def test_f1_Able(self):
result = f1(2, 3)
self.assertEqual(result, 9)
#self.assertEqual(调用的一个引用, 自己预测调用之后的结果数值)
def test_f2_Able(self):
result = f2(2, 1)
self.assertEqual(result, 2)
unittest.main()
图片如下:
刚刚写的时候粗心写成了 text_f1_Able(): 结果运行不了,找了问题半天,原来是要写成test, 真的是麻了
接下来再来一遍那个步骤:
"""
操作的步骤
1.先进行导入模块unittest
2.导入需要测试的类
3.再创建一个集成unittest.TestCase的类
4.再编写一系列方法对函数行为而不同方面进行测试
“”"
上面的代码实在是太枯燥了,所以我来理顺一下敲集成unittest.TestCase类的步骤。
首先呢,写出:
class Hello_Text_Class(unittest.TestCase): 里面的unittest.TestCase是需要写进那个圆括号里面的。
记住:unittest.TestCase
然后呢,就是再这个类里面敲出hello.py里面定义的一个或者多个函数,
比如f1, f2
下面来说逐步一下这个代码吧:
1:*def test_f1_Able(self):*这里就是再定义一个函数,记住:需要使用那个test开头,然后在后面加上_ 后面的名字最好是和需要测试的这个函数有关的命名
#下面的result就是我们自己进行调用这个函数然后得出的结果返回给result记录下来,可能是记录下来吧,也许我说的不严谨,请大佬指教
result = f1(2, 3)
self.assertEqual(result, 9)
上面的的格式:self.assertEqual(调用的一个引用, 自己预测调用之后的结果数值)
跑一下试试效果:
错误的原因文字粘贴如下:
F.
FAIL: test_f1_Able (main.Hello_Text_Class)
Traceback (most recent call last):
File “第九周实验\textE1.py”, line 28, in test_f1_Able
self.assertEqual(result, 9)
AssertionError: 5 != 9
Ran 2 tests in 0.001s
FAILED (failures=1)
Process finished with exit code 1
哎哎,也许大家发现了,我第一个样例是发生了错误的,它还给出了我错误的原因:
Traceback (most recent call last):
File “第九周实验\textE1.py”, line 28, in test_f1_Able
self.assertEqual(result, 9)
AssertionError: 5 != 9
是的,第一个是一个加法运算,但是我自己给出的运算结果是9,但是我写进函数里的是:result = f1(2, 3) 2+3=5 != 9,是的,我算错了…自己预测的是9…
第二个没有发生错误,很好,预测对了!!
result = f2(2, 1)
self.assertEqual(result, 2)
跑的结果为:
Ran 2 tests in 0.001s
刚刚好写完,到点要下课了,去干饭了。
希望大家看了这个有所收获,感谢哦。