第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動態(tài)運(yùn)行時 PyTest 返回不正確的結(jié)果

動態(tài)運(yùn)行時 PyTest 返回不正確的結(jié)果

慕桂英3389331 2023-09-12 16:44:53
我試圖在代碼提交到 Flask 應(yīng)用程序時自動運(yùn)行測試,但不知何故 PyTest 返回錯誤的結(jié)果。我嘗試禁用緩存、刪除緩存文件夾并刪除 .pyc 文件,但問題仍然存在。這是該問題的玩具再現(xiàn)。目錄結(jié)構(gòu):app.pyright/    main.py    test_solution1.pywrong/    main.py    test_solution2.pyapp.pyimport pytestfrom flask import Flaskapp = Flask(__name__)@app.route("/")def submit():    pytest.main(["right", "-p", "no:cacheprovider"])    pytest.main(["wrong", "-p", "no:cacheprovider"])    return "OK"if __name__ == "__main__":    app.run("0.0.0.0")右/main.pydef subtract(a, b):    return a - b右/test_solution1.pyimport maindef test_subtract():    assert main.subtract(5, 3) == 2錯誤/main.pydef subtract(a, b):    return b - a錯誤/test_solution2.pyimport maindef test_subtract():    assert main.subtract(5, 3) == 2如果我加載應(yīng)用程序并localhost:5000在瀏覽器中訪問,它會按預(yù)期觸發(fā)每個目錄中的測試,但兩個結(jié)果是相同的。它說所有測試都通過了,盡管 的測試wrong應(yīng)該失敗。如果我交換 Flask 應(yīng)用程序中測試的觸發(fā)順序,那么兩個項(xiàng)目的測試都會失敗,即使第二個項(xiàng)目應(yīng)該通過。修改了submit()路線app.py(現(xiàn)在首先運(yùn)行“錯誤”的項(xiàng)目)@app.route("/", methods=["GET","POST"])def submit():    pytest.main(["wrong", "-p", "no:cacheprovider"])    pytest.main(["right", "-p", "no:cacheprovider"])    return "OK"現(xiàn)在,盡管“正確”的項(xiàng)目沒有問題,但兩項(xiàng)測試都顯示失敗。如何確保 pytest 完全運(yùn)行目錄中的代碼?我認(rèn)為它以某種方式緩存結(jié)果,就好像名稱main.py不沖突一樣,它工作得很好。在運(yùn)行測試之間刪除__pycache__類似的目錄和文件沒有幫助。在運(yùn)行測試之間停止并重新加載 Flask 服務(wù)器確實(shí)可以解決該問題。
查看完整描述

1 回答

?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊

這是因?yàn)樵赑ython中,如果你嘗試導(dǎo)入同一個模塊兩次,Python將不會第二次在文件系統(tǒng)中搜索。它將使用第一次導(dǎo)入的模塊。您正嘗試導(dǎo)入兩次該模塊main。即使您認(rèn)為這是兩個不同的模塊,從 Python 的角度來看,您也會嘗試導(dǎo)入同一個模塊兩次(因?yàn)樗鼈兌急幻麨閙ain)。您可以在文檔中閱讀有關(guān)模塊緩存系統(tǒng)的更多詳細(xì)信息。


根據(jù)您想要做什么,可能有很多解決方案。這是兩個:


解決方案1

您可以簡單地將主模塊的名稱更改為不同的名稱:


app.py

right/

    main1.py

    test_solution1.py

wrong/

    main2.py

    test_solution2.py

test_solution.py


import main1


def test_subtract():

    assert main1.subtract(5, 3) == 2

test_solution2.py


import main2


def test_subtract():

    assert main2.subtract(5, 3) == 2

解決方案2

您保留相同的文件名,但指定要導(dǎo)入的子模塊:


test_solution.py


from right import main


def test_subtract():

    assert main.subtract(5, 3) == 2

test_solution2.py


from wrong import main


def test_subtract():

    assert main.subtract(5, 3) == 2

這是可行的,因?yàn)?Python 在搜索模塊時會在本地目錄中查找,并且您在 和 文件夾所在的相同位置啟動app.pyPython 。rightwrong


查看完整回答
反對 回復(fù) 2023-09-12
  • 1 回答
  • 0 關(guān)注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號