[英]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__
設置為trialTest
或tests.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.