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