簡體   English   中英

pytest如何找到要測試的文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM