Discuss / Python / 为什么运行单元测试的时候,要在.py脚本的最后加上两行if __name__ == '__main__': unittest.main() ,而不是加在其他地方?

为什么运行单元测试的时候,要在.py脚本的最后加上两行if __name__ == '__main__': unittest.main() ,而不是加在其他地方?

Topic source

如果把这两行代码加在最前面的位置。也就是:

import unittest

if __name__ =='__main__':
    unittest.main()
    
from mydict import Dict

class TestDict(unittest.TestCase):
    def test_init(self):
        d = Dict(a = 1, b='test')
        self.assertEqual(d.a,1)
        self.assertEqual(d.b,'test')
        self.assertTrue(isinstance(d,dict))
    
    def test_key(self):
        d = Dict()
        d['key'] = 'value'
        self.assertEqual(d.key, 'value')

    def test_attr(self):
        d = Dict()
        d.key = 'value'
        self.assertTrue('key' in d)
        self.assertEqual(d['key'], 'value')

    def test_keyerror(self):
        d = Dict()
        with self.assertRaises(KeyError):
            value = d['empty']

    def test_attrerror(self):
        d = Dict()
        with self.assertRaises(AttributeError):
            value = d.empty

在命令行里运行 

python mydict_test.py

结果是 Ran 0 tests in 0.000s

没有进行任何测试。求大神解答是为什么?

这句话是调用上一个函数的,如果放在开头其他函数不会执行,要放在末尾

详情看这篇文章

https://blog.csdn.net/num_61/article/details/108266067?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162873719816780264037067%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162873719816780264037067&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-108266067.pc_search_download_positive&utm_term=if+__name__+%3D%3D+%27__main__%27%3A+unittest.main%28%29&spm=1018.2226.3001.4187

孤云_2001

#3 Created at ... [Delete] [Delete and Lock User]

你放开头测试类都没定义呢,当然是0啦,程序是从上往下执行的呀!

谢谢!我懂了!这个网址总结的很好:

if __name__ == '__main__': unittest.main()的意思就是:

当程序自己运行时,则调用当前程序中名字以“test”开头的函数

当程序被调用运行时,则不运行程序中名字以“test”开头的函数


  • 1

Reply