使用unittest测试烧瓶应用程序时出错

时间:2020-02-05 06:12:45

标签: python unit-testing flask

我有

ModuleNotFoundError:没有名为“项目”的模块

尝试运行test_req.py时 我的项目结构是:

├── instance/
│   ├── flask.cfg
├── project/
│   ├── __init__.py
│   ├── base_processing.py
│   ├── models.py
|   ├── views.py
│   ├── templates/
│   │   ├── base.html
│   │   ├── login.html
│   │   ├── note.html
│   │   ├── notes.html
│   └── static/
│   │ 
│   └── tests/
│       ├── test_req.html
├── run.py

我的UnitTest文件是:

# project/test_req.py

    import unittest
    import os

    from project import app
    from project.models import db, User, Note
    from project.views import *

    TEST_DB = 'test.db'

    class RequestTests(unittest.TestCase):

        @classmethod
        def setUpClass(cls):
            app.config['TESTING'] = True
            app.config['WTF_CSRF_ENABLED'] = False
            app.config['DEBUG'] = False
            app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + \
                os.path.join(app.config['BASEDIR'], TEST_DB)
            app.secret_key = 'staytrue'
            cls.app = app.test_client()

        def setUp(self):
            db.create_all()

        def tearDown(self):
            db.drop_all()


        def test_main_page(self):
            response = self.app.get('/', follow_redirects=True)
            self.assertEqual(response.status_code, 200)

        def test_auth(self):
            u = User(username='testname1', password='1234567', email='cyber@mail.com')
            db.session.add(u)
            db.session.commit()
            response = self.app.post('/login', data=dict(username='testname1', password='1234567'), follow_redirects=True)
            with self.app.session_transaction() as sess:
                self.assertEqual(sess['username'], 'testname1')


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

当我从根目录运行该程序时,我的测试工作也可以很好地与鼻子2配合使用。这也是我第一次以此方式组织项目布局。

1 个答案:

答案 0 :(得分:1)

模块不是文件夹,应该是.py文件。由于您没有project.py文件,因此不应指定from project import app

指定from project import app意味着存在project.py文件,并且您要从该文件导入类app

如果您的test_req.pyapp.py文件位于同一文件夹中,则只需在import app中使用test_req.py

也替换:

from project.models import db, User, Note
from project.views import *

from models import db, User, Note
from views import *

进一步阅读:

此外,我建议您使用PyCharm Community Edition,它是免费的,多平台和开放源代码的软件,可以帮助您通过单击两次鼠标来解决此类任务。


假设我们在项目的根文件夹中具有以下项目结构:

/folder1/MyPythonFile1.py
/folder1/folder11/MyPythonFile2.py
/folder2/MyApp.py

project structure

/folder1/MyPythonFile1.py文件如下:

class Class1:
    def __init__(self):
        pass


class Class2:
    def __init__(self):
        pass

/folder1/folder11/MyPythonFile2.py文件如下所示:

class Class3:
    def __init__(self):
        pass

文件/folder2/MyApp.py使用上述文件中的类,如下所示:

from folder1.MyPythonFile1 import Class1
from folder1.folder11.MyPythonFile2 import Class3

obj1 = Class1()
obj3 = Class3()

将此示例应用于您的特定情况,并相应地更新您的进口商品。