繁体   English   中英

单元测试Flask应用程序类

[英]Unit testing a Flask application class

我对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)

当我通过我的测试

nosetests --with-coverage --cover-package apppackage ./test/test_application.py

我收到以下错误:

param2).app.test_client()AttributeError:MyApplication实例没有属性'app'

我已经尝试在类声明中移动应用程序,但这没有任何好处,并且不是我见过的所有其他单元测试指南都做到了。 为什么我的单元测试找不到“app”属性?

您的单元测试找不到“app”属性,因为MyApplication没有。 模块中有一个“app”属性,其中定义了MyApplication。 但那是两个不同的地方。

也许尝试以下方法:

class MyApplication(object):
    def __init__(self, param1, param2):
        self.app = Flask(__name__)
        self.app.add_url("/path/<methodParam>", "method1", self.method1, methods=["POST"])
        # Initialize the app

或者,你似乎也有一个“getApplication”方法,你并没有真正做任何事情,但我想你正在使用它。 也许你真的想在你的测试中...

def setUp(self):
        self.tearDown()
        param1 = # Param values
        param2 = # Param values
        # Other local setup 
        self.app = MyApplication(param1, param2).getApplication().test_client()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM