我正在嘗試為我正在處理的某些 Python 代碼撰寫單元測驗,并且其中一些代碼在完成后與 API 聯系。我正在嘗試運行一個簡單的 Flask API 來模擬這個 API 并檢查代碼是否發送了正確的資訊。這是代碼:
import unittest
import time
from threading import Thread
from flask import Flask
from flask_restx import Api, Resource
from werkzeug.serving import make_server
mock_app = Flask(__name__)
mock_api = Api(mock_app)
# Mock API
data_in = []
data_out = ""
result_code = 200
@mock_api.route('/jobs')
class MockAPI(Resource):
def post(self):
global data_in, data_out, result_code
data_in.append(mock_api.payload)
return data_out, result_code
# Unit test class
class TestClass(unittest.TestCase):
def __init__(self, arg):
super().__init__(arg)
# Some needed fields
# ...
# Mock API Server
self.mock_server = make_server('localhost', 6000, mock_wfm)
self.mock_server_thread = Thread(target = self.mock_wfm.serve_forever)
呼叫 to 的那一行make_server是導致例外的那一行。諸如lsof -i :6000不回傳任何內容、更改地址或埠之類的命令也無法解決任何問題。
編輯:
在錯誤行之前添加了一個簡單的列印后,我發現該代碼實際上被呼叫了兩次,導致錯誤。我還不知道為什么。
uj5u.com熱心網友回復:
問題是該__init__方法顯然在每次測驗中都被呼叫,因此每次在第二次測驗時都失敗了。
解決辦法是將server和Thread的創建放在setUp方法中,在tearDown中關閉。
def setUp(self):
self.mock_server = make_server('localhost', 6000, mock_wfm)
self.mock_server_thread = Thread(target = self.mock_server.serve_forever)
self.mock_server_thread.start()
time.sleep(1)
def tearDown(self):
self.mock_server.shutdown()
self.mock_server_thread.join()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388403.html
