我很难做一个简单的测试。
我的项目结构如下:

project:
   models:
      __init__.py
      user.py
      constants.py
      test:
         test.py

我想测试一下。
用户.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)

测试.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()

但是,运行时出现以下错误:
系统错误:未加载父模块“”,无法执行相对导入
我想我可能需要将模块包添加到python路径中?

最佳答案

以下是一些简化了我的测试并且非常适合我的东西。
始终从项目根目录进行测试
最初我假设,我的测试用例可以从任何目录中使用。
事实上,没有理由用这种方式使测试用例变得灵活,并且决定从项目根目录运行所有测试只会极大地简化解决方案。
对许多程序员来说,这可能是显而易见的,但对我来说,这是朝着简化测试迈出的一大步。
将测试目录与包代码分开
将生产代码和测试代码混合在一起似乎合乎逻辑,但很快就会变得混乱。
最后,我决定在项目中使用单独的tests(复数)目录,它对我来说非常有效。
优点是:
测试是“关闭”选择(请参见下一个与py.test相关的部分),并手动或从其他工具(如tox)中使用。
不需要在包目录中的某个地方搜索测试目录,它们只是单独存在。
尝试测试是安全的-因为您脱离了主代码。
注意:尽量使用always nametests,不要使用test。保持这个简单的规则将简化您的工作,因为您总是知道测试目录的真实名称。
使用测试框架
有多个测试框架(pytestunittestnosenose2)实际上都提供了您需要的基础。
总之,我发现使用pytest非常有趣,原因有两个:
可以运行在其他框架中编写的大多数测试(UnitTest、Nose…)
很容易创建第一个测试函数。
测试功能可以保持非常简单,优秀的夹具将向其注入所需的值。一旦你尝试了它,你将不会使用其他方法。
允许自然扩展测试套件
很好地开始原型化您的代码并发展到生产一:
启动测试功能
从测试函数移到同一测试文件中的独立函数
移动到外部模块(并且大多数测试代码不会更改)
避免在测试套件目录中使用pytest
请参阅Choosing a test layout/import rules以获取解释,并按照建议避免使用py.test
简而言之,事情会简单一些。
请注意,其他方法也会起作用,并且没有错——我只是想分享哪些方法对我非常有效。

关于python - Python,导入模块进行测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35636736/

10-11 22:22
查看更多