2010-02-07 36 views
3

我試圖創建的功能模擬駐留在一個單獨的模塊 一個文檔測試和導入爲波紋管模擬Y(從X進口Y)的文檔測試(蟒蛇)

from foomodule import foo 

def bar(): 
    """ 
    >>> from minimock import mock 
    >>> mock('foo', nsdicts=(bar.func_globals,), returns=5) 
    >>> bar() 
    Called foo() 
    10 
    """ 
    return foo() * 2 


import doctest 
doctest.testmod() 

foomodule .py:

def foo(): 
    raise ValueError, "Don't call me during testing!" 

失敗。

如果我改變進口進口foomodule 和使用foomodule.foo到處 然後,它的工作原理。

但是有沒有解決上述方法導入的模擬函數?

+0

我看到一些與模擬模塊非常相似的東西。這是否解決了? – shreddd

回答

2

最後,發現這是MiniMock主幹版本的一個問題。 舊穩定一個按預期執行。

4

你剛剛遇到了很多原因之一,最好不要從「內部」模塊導入對象 - 只有模塊本身(可能來自包內)。我們已經將這個規則作爲我們Google風格指南的一部分(公佈於here),我衷心向每位Python程序員推薦它。

這就是說,你需要做的是採取foomodule.foo,你剛剛取代了模擬,並將其粘貼在當前模塊。我不記得文檔測試的內部的足以證實是否

>>> import foomodule 
    >>> foo = foomodule.foo 

就足夠爲 - 試試看,如果它不工作,做的卻

>>> import foomodule 
    >>> import sys 
    >>> sys.modules[__name__].foo = foomodule.foo 

是的,這是一團糟,但造成這個混亂的原因是,天真無邪的from foomodule import foo - 避開那個,你的生活會更簡單,更富有成效;-)。

+0

亞歷克斯,感謝您的指導鏈接。除了標準的PEP之外,我一定會使用它。 – Evgenyt

+1

已發佈的鏈接是404。 – Kyle

+0

看起來當前鏈接是[Google的Python風格指南](https://google.github.io/styleguide/pyguide.html),可以在他們的[GitHub repo]中找到(https:// github.com/google/styleguide)。 – alttag