我正在努力设置一个简单的测试.
我的项目结构如下:
project:
models:
__init__.py
user.py
constants.py
test:
test.py
Run Code Online (Sandbox Code Playgroud)
我想测试user.py
py运行test.py
.
user.py
from sqlalchemy import Column, Integer, String, Text
from sqlalchemy.orm import relationship
from .models.constants import *
from .models import Base
class User(Base):
__tablename__ = 'users'
uid = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String, nullable=False)
email = Column(String, nullable=False)
picPath = Column(String, unique=True)
description = Column(Text)
def __repr__(self):
return "<User(uid=%s, name=%s)>" %(self.uid, self.name)
Run Code Online (Sandbox Code Playgroud)
test.py
from ..user import User, Group
def _TestUser():
TEST_DB_URI = "postgresql://project:password@localhost:5432/projectdbtest"
SessionMaker = sessionmaker()
engine = create_engine(TEST_DB_URI)
SessionMaker.configure(bind=engine)
session = SessionMaker()
user = User("test subject", "testsubject@gmail.com", "~/testsubject.jpg", "I am a test subject")
session.add(user)
session.commit()
Run Code Online (Sandbox Code Playgroud)
但是,我运行时收到以下错误python3 -m test.py
:
SystemError:父模块''未加载,无法执行相对导入
我想我可能要将模块包添加到python路径?
Jan*_*sky 12
这里有一些东西,它简化了我的测试,对我很有帮助.
最初我假设,我的测试用例可以在任何目录中使用.
实际上,没有理由以这种方式使测试用例变得灵活,并且决定从项目根目录运行所有测试只会大大简化解决方案.
对于许多程序员来说,这可能是显而易见的,但对我而言,它是简化测试的重要一步.
将生产代码与测试代码混合似乎是合乎逻辑的,但很快就会变得混乱.
最后我决定在项目中使用单独的tests
(复数)目录,它对我来说非常有效.
优点是:
py.test
)并手动或使用其他工具tox
.注意:尽量使用always name tests
,不要使用test
.保持这个简单的规则将简化您的工作,因为您将始终知道测试目录的真实名称.
pytest
测试框架有多种测试框架(unittest
,nose
,nose2
,pytest
),事实上所有提供你所需要的基本知识.
无论如何,我发现pytest
(带py.test
命令)使用真的很有趣,原因如下:
__init__.py
在测试套件目录中使用有关说明,请参阅选择测试布局/导入规则,并遵循建议以避免使用__init__.py
.
简而言之,事情会更简单.
请注意,其他方法也会起作用并且没有错 - 我只想分享对我来说非常有效的方法.
归档时间: |
|
查看次数: |
6679 次 |
最近记录: |