2011-11-08 47 views
10

我試圖讓nosetests來識別我的測試,但它沒有正確運行我的任何測試。任何人都知道nosetest的-m,-i和-e是如何工作的?

我有以下文件結構

Project 
    +----Foo/ 
      +----__init__.py 
      +----bar.py 
    +----test/ 
      +----__init__.py 
      +----unit/ 
       +----__init__.py 
       +----bar_test.py 
      +----functional/ 
       +----__init__.py 
       +----foo_test.py 

在bar_test.py

class BarTest(unittest.TestCase): 
    def bar_1_test(): 
     ... 

在foo_test.py

class FooFTest.py 
    def foo_1_test(): 
     ... 

使用-m,-i,-e選項nosetests

  • 什麼是正則表達式,我需要只運行單元測試(以單位/,類BarTest測試)
  • 什麼是我需要只運行功能測試正則表達式(在功能/,類FooFTest測試)

我已經試過各種組合,似乎無法得到nosetests做什麼,我想一直

回答

6

只運行測試下Project/test/unit是使用--where最簡單的方法。例如:

nosetests --where=Project/test/unit 

然後使用--match-m)或--exclude-e)細化的列表中,如果需要的話。

如果你還是想用正則表達式選擇,你也許可以做這樣的(未測試):

nosetests --match='^Foo[\b_\./-])[Tt]est' 

執行從Project目錄該腳本將運行與「富」開始所有測試並以「[Tt] est」結尾。

作爲一般規則,您可能需要使用--match--exclude,但不能同時使用兩者。這些參數都指定要匹配的函數名稱的模式。您可以通過使用--ignore-files來改進其中的一個,這自然會允許您忽略整個文件。

+0

so --match和--exclude只匹配測試方法而不測試類名? – sasker

+0

糟糕。接得好。你是對的。從--match文檔:「與此正則表達式匹配的文件,目錄,函數名稱和類名稱被視爲測試。」因此,您可以使用--match來收集所有測試,然後使用--exclude忽略那些包含「bar」的測試。 – Lemur

3

鑑於您的目錄結構,您可以使用--exclude選項輕鬆運行測試的各個部分。

運行所有測試:

nosetests Project 

運行單元測試:

nosetests Project -e functional 

運行功能測試:

nosetests Project -e unit 

如果您有更復雜的測試執行需求,我建議標記測試並使用the attrib package

相關問題