2015-06-30 27 views
2

我剛剛添加了一個單元測試給我的一個Python模塊,鼻子拒絕拿起。測試看起來像這樣:Python:鼻子沒有拿起新的測試

class TestMargin(unittest.TestCase): 

    def setUp(self): 
     super().setUp() 

    def test_margin(self): 
     self.assertTrue(False) 

我希望這個測試失敗,但它似乎甚至沒有拿起。我用--all-modules標誌運行鼻子,並且其他模塊中的測試確實正在拾取,所以它似乎不是鼻子的通用問題。我已經檢查了鼻子的文件,看不到任何充分的理由爲什麼這個測試不應該工作...

編輯:我解決了這個問題(有點偶然)在模塊級別添加一個空__init__.py 。但爲什麼這會有所幫助?

+1

我猜這個模塊沒有被包含在內。殘酷地,你可以在它的頂部放置一個打印語句來仔細檢查 - 儘管鼻子可能有一個更加整齊的方式來打印所有包含的模塊! –

回答

4

你的測試看起來不錯,但你必須把它放在正確的地方在正確的文件名,以便鼻子發現它。

您可以通過-vvv

運行它在默認情況下鼻子看鼻子的內部工作,使決策是否對兩件事情陷入你的目錄結構:它是一個包?如果是的話,鼻子會繼續尋找目錄進行更多的測試。正在a package in python意味着有__init__.py文件。這就是爲什麼加入__init__.py解決了這個問題。

如果該目錄是不是一個包,鼻子仍可能想看看它,如果它看起來像一個test目錄,即tests或者如果它看起來像一個源目錄,即srclib。但我想不是這種情況。

看一看nose usage documentation

相匹配的testMatch正則表達式的任何Python源文件,目錄或包(默認情況下:(?:^ | [B _.-])[Tt的] EST)將作爲測試收集(或收集測試的來源)。另外,在工作目錄中找到的所有其他將被檢查用於匹配testMatch的python源文件或目錄。包發現一直沿着樹向下,所以package.tests和package.sub.tests和package.sub.sub2.ubst都將被收集。

此外,鼻子只是一堆python文件,所以你可以隨時查看代碼,看看它如何發現測試。在這種情況下,你可能想要在selector.py中查看wantDirectory()方法

相關問題