我有两个模块,有两个不同的类及相应的测试类。
foo.py
------
class foo(object):
def fooMethod(self):
// smthg
bar.py
------
class bar(object):
def barMethod(self):
// smthg
fooTest.py
------
class fooTest(unittest.TestCase):
def fooMethodTest(self):
// smthg
barTest.py
------
class barTest(unittest.TestCase):
def barMethodTest(self):
// smthg
在任何测试和源模块,文件中,我删除 if __name__ == "__main__":
,因为增加了一致性并遵守面向对象的意识形态。
与Java单元测试一样,我正在寻找创建一个模块来运行所有单元测试。例如,
runAllTest.py
-------------
class runAllTest(unittest.TestCase):
?????
if __name__ == "__main__":
?????
我找了搜索引擎,但没有找到任何教程或示例。有可能这样做吗?为什么?或者怎么样?
注意:我在Windows机器上使用eclipse和pydev发布。
答案 0 :(得分:4)
您可以创建TestSuite
并在其if __name__ == '__main__'
块中运行所有测试:
import unittest
def create_suite():
test_suite = unittest.TestSuite()
test_suite.addTest(fooTest())
test_suite.addTest(barTest())
return test_suite
if __name__ == '__main__':
suite = create_suite()
runner=unittest.TextTestRunner()
runner.run(suite)
如果您不想手动创建测试用例,请查看this quesiton/answer,它基本上会动态创建测试用例,或使用unittest
模块的某些功能,如test discovery功能和command line选项..
答案 1 :(得分:3)
在运行基于内置python unittest模块的单元测试时,在项目的根目录下运行
python -m unittest discover <module_name>
对于上面的特定示例,足以运行
python -m unittest discover .
答案 2 :(得分:1)
我认为你要找的是TestLoader。有了这个,您可以加载特定的测试或模块或加载给定目录下的所有内容。另外,this帖子有一些使用TestSuite
实例的有用示例。
编辑:我通常在test.py中的代码:
if not popts.tests:
suite = unittest.TestLoader().discover(os.path.dirname(__file__)+'/tests')
#print(suite._tests)
# Print outline
lg.info(' * Going for Interactive net tests = '+str(not tvars.NOINTERACTIVE))
# Run
unittest.TextTestRunner(verbosity=popts.verbosity).run(suite)
else:
lg.info(' * Running specific tests')
suite = unittest.TestSuite()
# Load standard tests
for t in popts.tests:
test = unittest.TestLoader().loadTestsFromName("tests."+t)
suite.addTest(test)
# Run
unittest.TextTestRunner(verbosity=popts.verbosity).run(suite)
有两件事:
答案 3 :(得分:1)
用PyDev右键单击Eclipse中的文件夹,然后选择“Run as-&gt; Python unit-test”。这将运行该文件夹中的所有测试(测试文件和方法的名称必须以“test _”开头。)
答案 4 :(得分:1)
答案 5 :(得分:0)