2011-04-26 103 views
2

可以指示nose測試框架僅在test_*.py文件中運行測試嗎?如何防止鼻子導入__init__.py文件?

事實上,這樣做nosetests A具有以下目錄結構:

A/ 
    test_A.py 
    B/ 
    __init__.py 

進口B,這是我想避免的。

其原因是B模塊以import numpy開頭,因爲它僅用於用戶安裝可選NumPy模塊時使用。但是,沒有安裝NumPy的用戶不希望nosetests處理B/__init__.py,因爲即使NumPy是可選的,它也一定會在import numpy上失敗。這怎麼能實現?

+0

也許您可以將可選代碼從B/__ init__.py移到B/numpy_support.py模塊中。 – 2011-04-27 10:23:46

+0

@Adi:是的,但在我的情況下,'import AB'是合乎邏輯的選擇(它等於'uncertainties.unumpy',它包含'numpy'函數的替換函數:將替換模塊稱爲不確定性會很奇怪.unumpy.numpy_support')。 – EOL 2011-04-27 21:23:11

回答

1

鼻子可以接受/拒絕目錄,文件,模塊,類和方法級別的測試。您需要拒絕B目錄。無法忽略__init__.py文件; Python從來沒有看到它。它在導入B時顯示,因此您需要忽略B

嘗試:

nosetests --exclude=B 
+0

請注意,這是Python導入東西的方式的效果,它與Nose無關。 – dbn 2013-02-06 00:55:38

+0

爲了使這個答案更加完整:'--exclude ='中的路徑與給定鼻測試的路徑相對*。要繼續問題中的例子:'nosetests --exclude = B A /'(而不是'--exclude = A/B')。 – EOL 2014-01-12 20:00:38

4

只需使用try:..except ImportError:...塊封裝導入。在這種情況下,你甚至可以設置一個變量讓你知道numpy是否可用。

+0

如果鼻子允許我避免這種情況,我希望它:用戶使用B模塊的唯一原因是,如果他們安裝了NumPy,那麼運行鼻子的能力將成爲ImportError測試的唯一原因。我想避免在B中添加僅對鼻子有意義的代碼。 – EOL 2011-04-27 07:48:06

2

當然,只需使用--match和--exclude命令行選項來限制鼻子會作爲測試程序發現。

+0

如何在這種情況下使用'--match'?做'nosetests --match'X _ *。py'A'仍然會導入'B/__ init __。py',即使'A'中沒有'X _ *。py'文件。 – EOL 2011-04-27 07:51:59

+0

我也嘗試過'nosetests --exclude'__init__.py'A',但是這仍然導入'B/__ init __。py'。 – EOL 2011-04-27 07:54:34

+0

我認爲鼻子仍然會掃描/導入所有模塊,所以在這種情況下匹配,測試和排除不起作用。 – 2011-04-27 09:12:20

0

我覺得鼻子排除插件可能會有幫助。如果你安裝了這個插件,然後運行:

nosetests --exclude-dir B 

它可能適合你。我有同樣的問題,並取得了一些可以通過的結果。現在我的下一個問題是,創建nosetests配置文件時,exclude-dir似乎不是一個可用的選項。