从测试模块运行单元测试

时间:2012-01-10 09:02:23

标签: python unit-testing

我有一堆模块,对于每个模块,我都有基于unittest的测试。我想在每个模块中定义main来运行它的测试,但由于import循环(特别是当我在测试中使用from mymodule import myclass时,我得到导入错误。 我怀疑这是一个已经解决的问题,所以 - 我应该把我的模块主要用于运行相应的测试?

1 个答案:

答案 0 :(得分:4)

如果我理解正确,你有一个文件(让我们称之为mymodule.py),如下所示:

import unittest
from mymoduletests import MyModuleTests

class myclass(object):
    def somefunction(self, x):
        return x*x

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

和一个单独的文件(让我们称之为mymoduletests.py)看起来像这样:

import unittest
from mymodule import myclass

class MyModuleTests(unittest.TestCase):
    def test_somefunction(self):
        m = myclass()
        self.assertEqual(4, m.somefunction(2))

如果运行mymodule.py,则会得到以下结果:

Traceback (most recent call last):
  File "mymodule.py", line 2, in <module>
    from mymoduletests import MyModuleTests
  File "/Users/srgerg/Desktop/p/mymoduletests.py", line 2, in <module>
    from mymodule import myclass
  File "/Users/srgerg/Desktop/p/mymodule.py", line 2, in <module>
    from mymoduletests import MyModuleTests
ImportError: cannot import name MyModuleTests

但是,如果您将mymodule.py更改为:

class myclass(object):
    def somefunction(self, x):
        return x*x

if __name__ == '__main__':
    import unittest
    from mymoduletests import MyModuleTests
    unittest.main()

然后运行它,你得到:

.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

我理解正确吗?