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
任何人都知道为什么这会通过:
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