簡體   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