簡體   English   中英

Python 模塊單元測試

[英]Python unittest for modules

通過調用

python -m unittest discover 

命令。 兩個包在一個模塊中,如下所示

test
 |_ mytest.py
my_module
  |__foo.py
  |__bar.py 

bar.py中的什么位置

#bar.py
from foo import baz
# Do things using baz

問題是當 unittest discover 命令運行時,在bar.py中找不到foo了。 這是因為my_module在 python 測試中被視為正確的模塊,所以我需要這樣做

from my_module.foo import baz

但這在單獨使用模塊時不起作用。 那么該怎么辦? 我看到 2 個選項,但它們不是那么整潔,所以我想要更多輸入:

  1. 讓 my_module 中的init .py 將 my_module 添加到 PYTHONPATH
  2. 讓 mytest.py 將 my_module 添加到 PYTHONPATH

但是,我發現此頁面說明

切勿將 package 目錄或 package 內的任何目錄直接添加到 Python 路徑。

提出的 arguments 似乎是有道理的,隨着我們的存儲庫不斷增長,我們應該努力做到這一點。

你會怎么做?

如果您還想讓這些模塊獨立,那么它們不應該在另一個模塊內。 因為那樣的話,你已經違反了“永遠不要在模塊中添加頁面目錄......”然后你也可以將該路徑添加到 pythonpath 中。

如果您不想對my_module進行任何更改以將其變成可以由單元測試導入的 package,則一種解決方案是將單元測試移至my_module中。 例如,您可以:

# my_module/bar.py

from foo import baz
# my_module/test_bar.py

import bar

# Tests...

然后從my_module內部運行python -m unittest discover或從項目根目錄運行 python -m python -m unittest discover --start-directory my_module

順便說一句,我認為這里的術語可能有些混亂。 在 Python 中,模塊通常是單個.py文件,而 package 通常是包含一組.py文件的文件夾,其中一個是__init__.py 出於這個原因, foobar可能真的是模塊,而my_module可能是 package (或者如果它有一個__init__.py文件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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