私は Python にかなり慣れていないので、これが基本的なことで大騒ぎになっている場合は、事前にお詫び申し上げます。
テスト用に SQLAlchemy を使用して Flask アプリケーションをセットアップするにはどうすればよいですか? に似た状況があります。私にとっての大きな違いは、インターネットで見られる他のほとんどの Flask の例とは異なり、アプリケーション用に持っているコードのほとんどがクラスにあることです。何らかの理由で、これが原因で単体テストが正しく機能しません。以下は、私のアプリケーションとテストの基本的なセットアップです。
応用:
from Flask import Flask
app = Flask(__name__)
class MyApplication():
def __init__(self, param1, param2):
app.add_url("/path/<methodParam>", "method1", self.method1, methods=["POST"])
# Initialize the app
def getApplication(self):
options = # application configuration options
middleware = ApplicationMiddleware(app, options)
return middleware
def method1(self, methodParam):
# Does useful stuff that should be tested
# More methods, etc.
アプリケーションテスト:
import unittest
from apppackage import MyApplication
class ApplicationTestCase(unittest.TestCase):
def setUp(self):
self.tearDown()
param1 = # Param values
param2 = # Param values
# Other local setup
self.app = MyApplication(param1, param2).app.test_client()
def tearDown(self):
# Clean up tests
def test_method1(self):
methodParam = # Param value
response = self.app.post("path/methodParam")
assert(reponse.status_code == 200)
経由でテストを実行すると
ノーズテスト --with-coverage --cover-package apppackage ./test/test_application.py
次のエラーが表示されます。
param2).app.test_client() AttributeError: MyApplication インスタンスに属性 'app' がありません
クラス宣言内でアプリを移動しようとしましたが、それは何の役にも立たず、私が見た他のすべてのユニットテストガイドがそれを行う方法ではありません. 単体テストで "app" 属性が見つからないのはなぜですか?