Python mock.patch没有返回模拟值

时间:2017-10-16 18:01:00

标签: python-3.x flask sqlalchemy python-unittest python-mock

我正在尝试使用unittest.mock模块来模拟我的sqlalchemy类。我指定了一个返回值,但是当我的测试运行被模拟的查询函数时,它会返回一个Nonetype变量。

这是我的测试。

def TestLoginSuccessful(self):
    with mock.patch('CaseLoader_Fl.models.ndems.User') as mocksql:
        mocksql.query.filter_by('').first.return_value = ('test_user','test_password')
        is_validated = login_controller.validate_user('test_user','test_password')
    self.assertTrue(is_validated)

这是我正在测试的功能,print(user)打印'无'。

def validate_user(username,password):
    user = User.query.filter_by(username=username).first()
    print(user)
    if user:
        if user.check_password(password):
            return login_user(user)
        else:
            print('wrong pass')
            return False
    else:
        print('no user')
        return False

这是我继承自SQLAlchemy的User类。

class User(export_db.Model):
    __bind_key__ = 'ndems'
    username = export_db.Column(export_db.String(80), primary_key=True, unique=True)
    password = export_db.Column(export_db.String(80))
    admin = export_db.Column(export_db.Boolean())

    def __init__(self, username, password, admin):
        self.username = username
        self.password = self.set_password(password)
        self.admin = admin

    def __repr__(self):
        return '<User %r>' % self.username

    def set_password(self, password):
        return generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password, password)

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return str(self.username)

感谢任何帮助或建议。

0 个答案:

没有答案