2017-06-23 75 views
0

所以我必須測試一個配置文件。在這個Config文件中,一個ConfigParser實例將被初始化,然後加載一個配置文件。Python配置器無法找到Unittest下的部分?

在Unittest中,我導入了這個解析器文件,然後嘗試讀取這個ConfigParse實例的一個節點。但是,它會產生一個錯誤,即它找不到該部分。

請問?有沒有辦法解決它?

編輯: 所以Unittest剛剛導入了配置文件。配置文件的名稱稱爲config。該實例稱爲p_config在測試用例中,實例將被稱爲:

config.p_config.get('section1','a') 

Config文件看起來非常標準。

import ConfigParser 
p_config = ConfigParser.SafeConfigParser() 
p_config.read("xxx.cfg") 

所以我的配置文件看起來很像一個普通的Windows配置:

[section1] 
a = 1 
b = 2 
[section2] 
c = 2 
d = 4 

它引發的錯誤只是說,它無法找到部分:

ConfigParser.NoSectionError: No section: 'section1' 

的單元測試的內容:

class TestConfigFile(TestCase): 

    def setUp(self): 
     pass 

    def tearDown(self): 
     pass 


    def test_example(self): 
     print global_path_config.get('section1', 'a') 
+0

用你的代碼精確地提問你的問題? ;)如果你想使用ConfigParser而不是json config。 – glegoux

+0

@glegoux嗨,我更新了它。 –

+1

你可以發佈你的configparser代碼(你在哪裏讀取文件)以及確切的錯誤信息? – chrki

回答

-1

我advi如果可以的話,讓你放棄ConfigParser。使用json文件進行配置

import json 
from collections import OrderedDict 

def read_config(file_json): 
    with open(file_json, 'r') as filename: 
     config = filename.read() 
    return json.loads(config, object_pairs_hook=OrderedDict) 

def write_config(config, file_json): 
    data = json.dumps(config, indent=4) 
    with open(file_json, 'w') as filename: 
     filename.write(data) 
+3

ConfigParser和JSON不是爲相同的用法而生成的。你不回答他的問題 –

+0

我知道,但如果它是你的配置文件。我認爲使用帶有json結構的配置比使用Microsoft Windows INI(由ConfigParser提供)更好。但是,如果它是thierce庫的配置文件,則無效,您沒有選擇。 – glegoux

+0

你的意思是在UnitTest中,ConfigParse實例不會工作嗎?但是怎麼樣? –

0

聽起來好像您正在設置測試配置對象,而實際上並未提供配置文件供您的測試讀取。

我假設你正在使用python unittest模塊。

您的命令行與運行項目和運行測試有什麼不同?命令行可能是一個問題。

例如,如果您使用python /path/to/file.py <--options> config.ini啓動您的程序,並且python -m unittest /path/to/config/unittest -v啓動您的單元測試,則永遠不會讀取您的配置文件。

setUp(self):中,您需要使用配置文件位置初始化對象。我更喜歡在setUp中編寫一個簡短的假配置文件,以便我可以在tearDown中輕鬆刪除它,並且確切知道它與測試的關係,而不會污染我的工作配置文件。

相關問題