Pytest 和 Google App Engine 测试台:验证错误导致测试失败,尽管符合预期?

问题描述 投票:0回答:1

我在 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

非常感谢任何帮助!

google-app-engine python-3.9 ndb
1个回答
0
投票

异常发生在您创建实体时,而不是在执行 put 时。

将实体创建包装在

pytest.raises()
中应该可以解决它。

© www.soinside.com 2019 - 2024. All rights reserved.