![](/img/trans.png)
[英]Does pytest support the use of function factories in test files?
[英]How does pytest find files to test?
我知道py.test如何發現要運行的測試,但是我不知道如何使測試引用包含要測試的代碼的文件。
我的項目如下所示:
arith.py
tests/
test_airth.py
在我的項目根目錄中,我有arith.py
文件,其中
def plus(x, y):
return x + y
在文件tests/test_arith.py
我有
import arith
def test_plus():
assert arith.plus(3, 5) == 8
當我運行時,在項目根目錄中,
pytest
它會發現我的測試文件,因為我遵循了測試發現規則。 但是pytest回復
導入測試模塊tests / test_arith.py時的ImportError
我從項目根目錄運行pytest
,為什么它不像我的導入一樣? 它想在tests
目錄中找到我正在測試的文件!
如何正確設置導入,以便我在tests/
目錄中的tests/
文件可以看到項目根目錄中的被測試文件? (pytest文檔中的示例似乎並沒有做任何特別的事情……也許測試與被測文件位於同一目錄中?它們詳細描述了測試發現,但我一定錯過了如何設置測試的方法,因此它們可以看到他們正在測試的代碼。)
假設您有這樣的布局(這就是我要做的):
.
├── myprogram
│ ├── __init__.py
│ ├── core.py
│ └── db.py
├── setup.py
└── tests
├── test_core.py
└── test_db.py
您應該像這樣調用pytest:
py.test tests
我相當確定這是測試目錄的絕對/相對路徑。 這還假設您已完成python -m pip install -e .
在您的根目錄中。 而且您也有一個.git
或.hg
文件夾:)
這有點奇怪,所以需要很多。 當然有更好的方法嗎?
其實那是最好的方法。 我認為宣布Python應用程序的最佳分發方式是Python軟件包(最好是wheel)並沒有爭議。 為此,您可能需要setup.py
。
通過安裝你的包(最好在VENV / virtualenv中沙箱)你確保你知道軟件包安裝/運行你需要什么。 如果安裝了軟件包,則意味着任何import myprogram
腳本(使用我的示例布局)都將能夠導入您的軟件包。 這就是您在測試套件中要做的事情。
然后,您的測試發現就像告訴pytest在哪里找到一樣簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.