2010-06-15 60 views
2

我有一個Python程序,它導入pythoncom(並使用pythoncom.CoCreateInstance從它)。我想爲程序邏輯創建一個單元測試,而不需要導入pythoncom(所以我也可以在Linux上運行測試)。單元測試在Python中:忽略從我想測試的代碼導入

有什麼選擇?我可以在不修改被測系統的情況下做到嗎?

我發現迄今:

sys.modules["pythoncom"] = "test" 
import module_that_imports_pythoncom 

我與它的問題是,如果我有:

from pythoncom.something import something 

我會得到:

ImportError: No module named something.something 

而且sys.modules["something.something"]sys.modules["pythoncom.something.something"]沒有按沒有工作。

任何想法?

回答

0

您可以將import pythoncom放入try except區塊。

+0

我說我不想修改被測系統,如果找不到pythoncom就不應該工作。我想要的是在我的測試中忽略或模擬pythoncom導入,所以我可以嘲笑它的一些功能。 – vaidab 2010-06-16 08:47:20

0

好的,如果您在測試中修改了PYTHONPATH,並在測試目錄pythoncom的文件系統上創建了一個新的包,幷包含必要的子目錄?

+0

這將工作,但我正在尋找一個簡單的解決方案,我可以標記這個模塊已經從我的測試中導入?或者用模擬替換它?運行測試時,我不想依賴OS。 – vaidab 2010-06-17 11:09:15

1

如果你需要運行測試,他們實際上是依賴於操作系統,您可能需要使用這些裝飾,例如:

def run_only(func, predicate): 
    if predicate(): 
     return func 
    else: 
     def f(*args, **kwargs): pass 
     return f 


def run_only_for_linux(func): 
    pred = lambda: sys.platform == 'linux2' 
    return run_only(func, pred) 


@run_only_for_linux 
def hello_linux(): 
    """docstring""" 
    print("hello linux") 

這樣,你宣佈這個測試僅在Linux上運行無需添加醜測試本身的複雜性。

+0

我得到以下運行此代碼:TypeError:f()不接受任何參數(1給出) – kormoc 2012-11-06 21:54:28

+0

是的,你是對的f函數太簡單了,應該現在修復.. – 2012-11-08 10:13:45