问题
作为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)
答案 0 :(得分:4)
在第一个示例中,__name__
将设置为__main__
,tests
目录将自动添加到sys.path
。这或多或少是偶然的;如果您将unittest.main
调用移到另一个模块,则无法以相同的方式导入它,data
可能不会显示。
在第二个示例中,trial
将根据__init__.py
目录中tests
文件的存在,将__name__
设置为trialTest
或tests.trialTest
;或者甚至是myproject.tests.trialTest
。
您应该将模块重命名为test_trialtest.py
,以便正确地通过试用版的模块行走代码发现它,然后使用模块名称而不是文件名来调用它。这意味着您应该清楚myproject/tests/test_trialtest.py
的模块名称假设是什么。 myproject
应该在sys.path
吗?父目录?
基本上,pkg_resources
非常依赖于加载和执行代码的命名空间的细节,因此您需要注意一切都是一致的。如果您确保以相同的方式导入所有内容(例如,从不__main__
),那么trial
和stdlib unittest
之间应该完全一致;除了你运行它(trial
本身)`作为主脚本而不是你的测试脚本作为主脚本之外,这里的试验并没有什么特别之处。
答案 1 :(得分:-1)
在测试目录中放置__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)