【问题标题】:Running unit tests on the "Flaskr" tutorial micro-blogging app in Flask在 Flask 中的“Flaskr”教程微博应用上运行单元测试
【发布时间】:2017-01-12 12:14:59
【问题描述】:

我已经从 Github 克隆了 flaskr 应用程序,并正在尝试遵循 Testing Flask Applications 教程。在Bonus: Testing the Application 之后,我在顶级flaskr 目录中添加了一个子目录test,因此我的目录树如下所示:

.
├── build
│   ├── bdist.linux-x86_64
│   └── lib.linux-x86_64-2.7
│       └── flaskr
│           ├── flaskr.py
│           ├── __init__.py
│           ├── schema.sql
│           ├── static
│           │   └── style.css
│           └── templates
│               ├── layout.html
│               ├── login.html
│               └── show_entries.html
├── dist
│   └── flaskr-0.0.0-py2.7.egg
├── flaskr
│   ├── flaskr.db
│   ├── flaskr.py
│   ├── flaskr.pyc
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── schema.sql
│   ├── static
│   │   └── style.css
│   └── templates
│       ├── layout.html
│       ├── login.html
│       └── show_entries.html
├── flaskr.egg-info
│   ├── dependency_links.txt
│   ├── PKG-INFO
│   ├── requires.txt
│   ├── SOURCES.txt
│   └── top_level.txt
├── MANIFEST.in
├── README
├── setup.cfg
├── setup.py
├── test
│   └── test_flaskr.py
└── tests
    └── test_flaskr.py

请注意,tests 目录中还有“内置”测试;但是,我正在 test_flaskr.py 目录 tests 中编写测试。到目前为止,我只尝试了一项测试:

import os
import flaskr
import unittest
import tempfile

class FlaskrTestCase(unittest.TestCase):

    def setUp(self):
        self.db_fd, flaskr.app.config['DATABASE'] = tempfile.mkstemp()
        flaskr.app.config['TESTING'] = True
        self.app = flaskr.app.test_client()
        with flaskr.app.app_context():
            flaskr.init_db()

    def tearDown(self):
        os.close(self.db_fd)
        os.unlink(flaskr.app.config['DATABASE'])

    def test_empty_db(self):
        rv = self.app.get('/')
        assert b'No entries here so far' in rv.data

if __name__ == '__main__':
    unittest.main()

但是,如果我尝试运行它,我会收到以下错误:

Traceback (most recent call last):
  File "/home/kurt/dev/scratch/flask/examples/flaskr/test/test_flaskr.py", line 13, in setUp
    flaskr.init_db()
AttributeError: 'module' object has no attribute 'init_db'

我不明白这个错误。我的flaskr.py 与https://github.com/pallets/flask/blob/master/examples/flaskr/flaskr/flaskr.py 上的相同,并且定义了init_db 函数。如何让单元测试运行?

【问题讨论】:

    标签: python unit-testing flask


    【解决方案1】:

    当您在脚本中导入flaskr 包时,您可以访问在flaskr/__init__.py 中声明和定义的变量、函数等

    init_db 未在 flask/__init__.py 中定义,提供的代码预计 init_db 将在 flask/__init__.py 中定义。

    有两种方法可以解决您遇到的问题:

    1. 将flaskr.init_db()替换为flaskr.flaskr.init_db()

    2. 修改test_flaskr.py中的import语句如下:

      将import flaskr 更改为from flaskr import flaskr

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多