Python单元测试:在另一个模块中运行测试

时间:2013-03-11 08:28:36

标签: python unit-testing module tdd

我希望将我的应用程序的文件放在文件夹/ Files下,而将单元放在/ UnitTests中,这样我就可以清楚地分开app和test。

为了能够使用与mainApp.py相同的模块路由,我在根文件夹中创建了一个testController.py。

mainApp.py
testController.py
Files
  |__init__.py
  |Controllers
     | blabla.py
  | ...
UnitTests
  |__init__.py
  |test_something.py

因此,如果在test_something.py中我想测试/Files/Controllers/blabla.py中的一个函数,我会尝试以下操作:

import unittest
import Files.Controllers.blabla as blabla


class TestMyUnit(unittest.TestCase):

    def test_stupid(self):
        self.assertTrue(blabla.some_function())


if __name__ == '__main__':
    unittest.main()


然后从文件testController.py中,执行以下代码:

import TestUnits.test_something as my_test
my_test.unittest.main()

哪个输出没有失败,但没有执行测试

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
[Finished in 0.3s]


我尝试过没有依赖关系的测试,如果执行“ main ”,但是当从外部调用时,输出相同:

import unittest


def tested_unit():
    return True


class TestMyUnit(unittest.TestCase):

    def test_stupid(self):
        self.assertTrue(tested_unit())


if __name__ == '__main__':
    unittest.main()

问题:如何让它发挥作用?

3 个答案:

答案 0 :(得分:19)

方法unittest.main()查看上下文中存在的所有unittest.TestCase类。 所以你只需要在testController.py文件中导入你的测试类,并在这个文件的上下文中调用unittest.main()。

所以你的文件testController.py应该是这样的:

import unittest    
from UnitTests.test_something import *
unittest.main()

答案 1 :(得分:4)

在test_something.py中,执行以下操作:

def suite():
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(TestMyUnit, 'test'))
    return suite

在testController.py中,执行以下操作:

from TestUnits import test_something

def suite():
    suite = unittest.TestSuite()
    suite.addTest(test_something.suite())
    return suite

if __name__ == '__main__':
    unittest.main(defaultTest='suite')

答案 2 :(得分:0)

使用subprocess.call()运行测试有一种解决方法,例如:

import subprocess

args = ["python", "test_something.py"]
subprocess.call(args)