首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试是否使用Pytest创建了类对象

如何测试是否使用Pytest创建了类对象
EN

Stack Overflow用户
提问于 2021-07-13 02:06:20
回答 1查看 61关注 0票数 1

我写了一个习惯跟踪应用程序,并使用SQLAlchemy在SQLite3数据库中存储数据。现在,我正在使用Pytest为我编写的所有函数编写单元测试。除了返回值的函数之外,还有一些通过创建对象在数据库中创建条目的函数。下面是我的对象关系映射器设置和两个主要类:

代码语言:javascript
复制
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Date
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# Setting up SQLAlchemy to connect to the local SQLite3 database
Base = declarative_base()
engine = create_engine('sqlite:///:main:', echo=True)
Base.metadata.create_all(bind=engine)
Session = sessionmaker(bind=engine)
session = Session()

class Habit(Base):    
    __tablename__ = 'habit'
    habit_id = Column('habit_id', Integer, primary_key=True)
    name = Column('name', String, unique=True)
    periodicity = Column('periodicity', String)
    start_date = Column('start_date', Date)

class HabitEvent(Base):
    __tablename__ = 'habit_event'
    event_id = Column('event_id', Integer, primary_key=True)
    date = Column('date', Date)
    habit_id = Column('fk_habit_id', Integer, ForeignKey(Habit.habit_id))

其中一个创建函数如下:

代码语言:javascript
复制
def add_habit(name, periodicity):
    if str(periodicity) not in ['d', 'w']:
        print('Wrong periodicity. \nUse d for daily or w for weekly.')
    else:
        h = Habit()
        h.name = str(name)
        if str(periodicity) == 'd':
            h.periodicity = 'Daily'
        if str(periodicity) == 'w':
            h.periodicity = 'Weekly'
        h.start_date = datetime.date.today()
        session.add(h)
        session.commit()
        print('Habit added.')

这是我的问题:由于这个函数没有返回可以与预期结果匹配的值,我不知道如何测试对象是否已创建。当我想使用以下函数检查是否所有对象都被删除时,同样的问题也会发生在我身上:

代码语言:javascript
复制
def delete_habit(habitID):    
    id_list = []
    
    id_query = session.query(Habit).all()
    for i in id_query:
        id_list.append(i.habit_id)
        
    if habitID in id_list:
        delete_id = int(habitID)
        session.query(HabitEvent).filter(
                HabitEvent.habit_id == delete_id).delete()
        session.query(Habit).filter(Habit.habit_id == delete_id).delete()
        session.commit()
        print('Habit deleted.')     
    else:
        print('Non existing Habit ID.')
EN

回答 1

Stack Overflow用户

发布于 2021-07-13 22:33:32

如果我理解正确的话,您可以使用get_habits函数作为add_habit测试的一部分。

代码语言:javascript
复制
def test_add_habit():

    name = 'test_add_habit'
    periodicity = 'd'

    add_habit(name, periodicity)

    # not sure of the input or output from get_habits, but possibly:
    results = get_habits(name)
    assert name in results['name']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68352068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档