前几天,在一个群里,一我的问了,这样一个问题。说他面试遇到一个面试官,问他,为啥unittest的测试用例要用test 开头,能不能定制化。他不知道为啥。python
看到这个题目,我回答固然能够了,能够用leizi开头。 可能你不信,那么今天雷子来给你实现下。看我说的是否是真的。那么我来实现下,我不修改前,看看用leizi开头命名的测试用例是否能够执行。面试
import unittest
class testone(unittest.TestCase):
def leizi1(self):
self.assertTrue(True)
def leizi2(self):
self.assertTrue(True)
def testone(self):
self.assertTrue(True)
if __name__=="__main__": unittest.main()
运行:ruby
就运行了一个测试用例。leizi开头的测试用例没有执行。我要变,我要让它只执行leizi开头的测试用例。微信
通过个人修改,咱们看下,仍是上面的测试用例,咱们看下执行结果函数
执行了两个测试用例,究竟是不是leizi开头的呢,咱们来打印下,看看是否执行的是leizi的用例。测试
import unittest
class testone(unittest.TestCase):
def setUp(self) -> None:pass
def tearDown(self) -> None:pass
def leizi1(self):
print("leizitest")
self.assertTrue(True)
def leizi2(self):
print("leizitest")
self.assertTrue(True)
def testone(self):
self.assertTrue(True)
if __name__=="__main__":
unittest.main()
结果:spa
打印的结果与预期彻底一致。那么雷子是怎么作到的,我先来给你解析一下。首先咱们使用的unittest.main()加载运行的测试用例,咱们能够去找这个main方法,在源码中能够发现code
咱们能够看到有这个TestProgram这个里面的,有这么一个函数,那么咱们对应的去看看这个里面的方法 。blog
默认加载的是defaultTestLoader,那么我去看看这里面有没有咱们想要的。ip
这里咱们能够看到 是一个类,这里有个定义的 test,咱们看看。接下来是怎么用的。
咱们能够搜索下,在这个类里面下面有一个获取测试用例名称的,这个地方判断了 测试用例名称调用了这个值,咱们能够改下试试,testMethodPrefix的值改为leizi试试。仍是上面的测试函数。
import unittestclass testone(unittest.TestCase):
def leizi1(self):
print("leizitest")
self.assertTrue(True)
def leizi2(self):
print("leizitest")
self.assertTrue(True)
def testone(self):
self.assertTrue(True)
if __name__=="__main__":
unittest.main()
结果:
只执行了leizi开头的,咱们修改为功了。
回到上面这个面试题。咱们在面试的时候都会遇到这种状况,其实这个时候咱们若是没有作过或者看过源码,能够回答,在我目前的获得的知识中,就是以test开头的,可是要是定制,我要看下源码,是否能够定制。若是你看过源码,那就直接说 我知道在哪一个文件下面的 什么值能够直接修改。
面试不难,面试题也不难。
学会解答,能给出方案来。
惟有变化,应对万变题目。
题目惟一,方案变幻无穷。
合理思路,方案有理有据。
基于需求,给定方案便可。
关注雷子说测试,天天带你分享不同的东西。
若是你感受有用,能够收藏,分享给你们。帮助你们一块儿成长。
有问题也能够和我交流。qq&微信:952943386