Pytest 条件语句与断言在同一行上不起作用

Pytest conditional statement on same line as assertion not working

任何人都知道为什么这会通过:

is_admin = True if app_database.role == 'admin' else False
assert app_request['is_admin'] == is_admin

但这失败了:

assert app_request['is_admin'] is True if app_database.role == 'admin' else False

is_admin = True if app_database.role == 'admin' else False可以写成

if app_database.role == 'admin':
    is_admin = True
else:
    is_admin = True

所以 assert app_request['is_admin'] == is_admin 有效。

然而,app_request['is_admin'] is True if app_database.role == 'admin' else False实际上是

if app_database.role == 'admin':
    is_admin = app_request['is_admin'] is True
else:
    is_admin = False

如果 app_database.role 不是 'admin' app_request['is_admin']False 那么断言实际上是

assert False

这将抛出一个 AssertionError

您需要使用括号来定义优先级

assert app_request['is_admin'] is (True if app_database.role == 'admin' else False)

或更简单

assert app_request['is_admin'] is (app_database.role == 'admin')

相当于

if app_database.role == 'admin':
    is_admin = True
else:
    is_admin = False

assert app_request['is_admin'] is is_admin