我已经从Github克隆了flaskr应用程序,并试图遵循Testing Flask Applications教程。在Bonus: Testing the Application之后,我在顶层test
目录中添加了一个子目录flaskr
,这样我的目录树如下所示:
.
├── 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
相同,并且定义了ojit_code函数。如何进行单元测试? 最佳答案
在脚本中导入flaskr
包时,可以访问在flaskr/__init__.py
中声明和定义的变量,函数等。init_db
未在提供的代码flask/__init__.py
中定义,希望init_db
在flask/__init__.py
中定义。
有两种方法可以解决您遇到的问题:
flaskr.init_db()
替换flaskr.flaskr.init_db()
test_flaskr.py
中的import语句,如下所示:将
import flaskr
更改为from flaskr import flaskr