在模块中编写单元测试的正确方法?

2024-09-27 17:55:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用模块文件MyTests.py中的unittest为我的主文件calc.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向我显示“run0test”?
在模块中编写unittest的正确方法是什么?你知道吗


Tags: 模块文件pyimportselfoutputmaindef
1条回答
网友
1楼 · 发布于 2024-09-27 17:55:25

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

相关问题 更多 >

    热门问题