繁体   English   中英

如何使用扭曲试验运行python unittest时加载资源文件

[英]how to load resource file while running python unittest using twisted trial

问题

作为python unittest的一部分,将加载一些输入json文件,这些文件存在于'data'目录下,该目录位于测试py文件的同一目录中。

'pkg_resources'用于此目的。

当unittest与python一起运行时,它工作正常。 但是在使用扭曲试验运行时失败了。

我的项目将testcase与python unittest测试用例以及twisted.trial.unittest测试用例混合在一起。 因此,一般需要使用扭曲试验来运行两种类型的测试用例。

使用扭曲试验运行测试用例时,会在路径中添加'_trial_temp'目录。 拜托,让我知道有办法解决这个问题吗?

示例目录结构:

myproject/
└── tests
    ├── data
    │   └── input.json
    ├── trialTest.py

trialTest.py

import unittest
import inspect
import pkg_resources

class Test(unittest.TestCase):
    def test_01_pathTest(self):
        dataDirExists =     pkg_resources.resource_exists(inspect.getmodule(self).__name__, 'data')
        print 'data exists: %s' % (dataDirExists)

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

使用python及其输出运行测试:

cd myproject
python tests/trialTest.py
data exists: True
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

使用python及其输出运行测试:

cd myproject
/usr/local/bin/trial tests/trialTest.py
trialTest
  Test
    test_01_pathTest ... data exists: False
                                                  [OK]

-------------------------------------------------------------------------------
Ran 1 tests in 0.013s

PASSED (successes=1)

在第一示例中, __name__将被设置为__main__ ,并且tests目录将被自动添加到sys.path 这或多或少是偶然的; 如果将unittest.main调用移动到另一个模块,则无法以相同的方式导入它,并且data可能不会显示。

在第二个示例中, trial将根据tests目录中__init__.py文件的存在,将__name__设置为trialTesttests.trialTest ; 或者甚至是myproject.tests.trialTest

您应该将模块重命名为test_trialtest.py以便正确地通过试用模块行走代码发现它,然后使用模块名称而不是文件名来调用它。 这意味着您应该清楚地了解myproject/tests/test_trialtest.py的模块名称应该是什么。 myproject应该在sys.path吗? 父目录?

基本上, pkg_resources依赖于加载和执行代码的命名空间的细节,因此您需要注意一切都是一致的。 如果确保所有内容都以相同的方式导入,使用相同的名称(例如,从不__main__ ),那么在trial和stdlib unittest之间应该完全一致; 除了你正在运行它( trial本身)`作为主脚本而不是你的测试脚本作为主脚本之外,这里没有什么特别的试用。

在tests目录中放置__init__.py可以解决问题。

[durai@localhost myproject]$ touch tests/__init__.py
[durai@localhost myproject]$ tree
.
├── tests
    ├── data
    │   └── input.json
    ├── __init__.py
    ├── trialTest.py
    └── trialTest.pyc

[durai@localhost myproject]$ trial tests/trialTest.py
tests.trialTest
  Test
    test_01_pathTest ... currModule: <module 'tests.trialTest' from '/home/durai/Worskspace/myproject/tests/trialTest.pyc'>
currModule: tests.trialTest
data exists: True
                                                  [OK]

------------------------------------------------------------------------------    -
Ran 1 tests in 0.016s

PASSED (successes=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM