我想使用模块文件calc.py
中的unittest为我的主文件MyTests.py
编写测试。
这是我的主要python文件calc.py
:
import myTests
def first(x):
return x**2
def second(x):
return x**3
def main():
one = first(5)
two = second(5)
if __name__ == "__main__":
main()
try:
myTests.unittest.main()
except SystemExit:
pass
这是我的MyTests.py
文件:
import unittest
import calc
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.testInput = 10
def test_first(self):
output = calc.first(self.testInput)
correct = 100
assert(output == correct)
def test_second(self):
output = calc.second(self.testInput)
correct = 1000
assert(output == correct)
当我运行calc.py
时,我得到以下输出:
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
为什么unittest打印出“Ran 0 test”? 在模块中编写unittest的正确方法是什么?
答案 0 :(得分:3)
unittests.main()
在当前模块中查找TestCase
个实例 。你的模块没有这样的测试用例;它只有一个myTests
全局。
最佳做法是自行运行测试 。将__main__
部分添加到myTests.py
文件中:
import unittest
import calc
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.testInput = 10
def test_first(self):
output = calc.first(self.testInput)
correct = 100
assert(output == correct)
def test_second(self):
output = calc.second(self.testInput)
correct = 1000
assert(output == correct)
if __name__ == '__main__':
unittest.main()
并改为运行python myTests.py
。
或者,将导入的myTests
模块传入unittest.main()
。您可能希望将import myTests
行向下移动到__main__
,因为您也有循环导入。在你的情况下,这很好,myTests
在测试用例之外不使用来自calc
的任何全局变量,但最好明确这一点。
if __name__ == "__main__":
main()
try:
import myTests
myTests.unittest.main(myTests)
except SystemExit:
pass