我的Python单元测试脚本如下所示。它使用参数“-a
”来确定测试用例是应该从foo_PC_A.py
还是foo_PC_B.py
加载基本模块。我使用shutil.move()
将其中一个.py文件重命名为foo.py,因此所有的testcase模块(例如tm1.py
,tm2.py
)都可以简单地import foo
。虽然这看起来像一个解决办法,而不是Python。有没有更好的办法?或者更好的设计从根本上解决这个问题
(运行\u all \u unittest.py)
if sys.argv[1] = '-a':
shutil.move('foo_PC_A.py', 'foo.py')
else:
shutil.move('foo_PC_B.py', 'foo.py')
test_module_list = ['tm1', 'tm2', ...]
for test_module_name in test_module_list:
test_module = __import__(test_module_name)
test_suites.append(unittest.TestLoader().loadTestsFromModule(test_module))
alltests = unittest.TestSuite(test_suites)
unittest.TextTestRunner().run(alltests)
if sys.argv[1] = '-a':
shutil.move('foo.py', 'foo_PC_A.py')
else:
shutil.move('foo.py', 'foo_PC_B.py')
(tm1.py)
from foo import MyTestCase
...
(foo\u PC\u A.py)
import <some module only available on PC A>
class MyTestCase(unittest.TestCase):
...
(foo\u PC\u B.py)
# since the PC A modules are not available on PC B,
# just call the pre-built executable via subprocess
import subprocess
class MyTestCase(unittest.TestCase):
...
def test_run(self):
subprocess.call(...)
您可以欺骗Python,使其认为模块已经加载。只需动态导入模块并使用^{} :
当任何模块运行
import foo
或from foo import ...
时,Python将使用该路径请注意,如果
foo
被移动到包中,则必须指定完整的Python路径,如下所示:相关问题 更多 >
编程相关推荐