我想为主文件 calc.py
编写测试,并在模块文件 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
为什么单元测试会打印“Ran 0 test”?
在模块中编写单元测试的正确方法是什么?
最佳答案
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
关于python - 在模块中编写单元测试的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20452340/