我在 pytest(版本 7.4.2)中遇到了一个奇怪的错误。我正在编写一些单元测试,包括一些期望出现异常的单元测试。特别是,我有一个测试,当您尝试 put() 记录时,预计会出现验证错误:
class TestMyModel:
@pytest.mark.parametrize("value", [-7, -1, 0])
def test_non_positive_value_validation_error(self, value):
from models.datastore import MyModel
from google.appengine.ext import ndb
m = MyModel(
_just_created=True,
value=value
)
with pytest.raises(Exception):
m.put()
现在,正如预期的那样,
m.put()
正在引发异常。然而,由于某种原因,这个错误导致测试失败?!
失败的 src/models/datastore/test/test_my_model.py::TestMyModel::test_non_positive_value_validation_error[-7] - ValueError: IntegerProp(b'value', validator=
) 必须是正整数!
另一方面,如果我传入正整数值,则测试会失败,因为未抛出异常(如预期):
失败的 src/models/datastore/test/test_pick_bins.py::TestPickBins::test_non_positive_bin_num_validation_error[1] - 失败:没有提升
我一直在网上搜索,但没有运气。不知道为什么会发生这种情况。我还发现,如果我使用
p = m.put_async()
并且从不调用 p.get_result()
...,我会得到相同的结果
对于我的单元测试,我已经通过自动使用夹具配置了测试台:
@pytest.fixture(scope='function', autouse=True)
def gae_testbed(request):
from google.appengine.ext import testbed
print('Activating gae_testbed...')
tb = testbed.Testbed()
tb.activate()
tb.init_all_stubs()
print ("gae_testbed initialized!")
def teardown():
print('Deactivating GAE stubs...')
tb.deactivate()
print('GAE stubs Deactived!')
request.addfinalizer(teardown)
return tb
非常感谢任何帮助!
异常发生在您创建实体时,而不是在执行 put 时。
将实体创建包装在
pytest.raises()
中应该可以解决它。