pytest解读fixtures中yield与addfinalizer区别是什么


本文小编为大家详细介绍“pytest解读fixtures中yield与addfinalizer区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytest解读fixtures中yield与addfinalizer区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。其实说到底还是我理解的不对,可能当时自己处在疑问中难免就会陷入进死循环,后来在github上经过别人提点方才醒悟。先来看下当时我尝试演示出上述结果的代码,也就是:setup代码中进行抛错,终结器的代码却并没有执行。代码分为2部分,一个是fixture函数代码,另一个则是测试用例。代码是不能直接copy出来运行的,是我在项目的用例中进行改造的,在这里仅仅帮助说明意思。最开始我想做的是,在fixture函数中,让代码db = DB()抛出一个mysql连接超时的错误,然后就能在控制台中看到”running finalizer code…”的输出。但是我执行后,并没有看到预期的输出,说明setup代码抛错后,addfinalizer代码并没有执行。最后经过github上朋友指点后,发现还是我自己理解错了。还是来看下官方的原文:We have to be careful though, because pytest will run that finalizer once it’s been added,even if that fixture raises an exception after adding the finalizer.这句话意思其实是说,当finalizer一旦添加成功后,pytest就会去执行它。就算是fixture函数在添加了finalizer之后抛出了异常。按照这样理解的话,那我在fixture函数中的代码就有问题了。因为db = DB()代码在request.addfinalizer(demo_finalizer)之前就抛错了,那么实际上并没有执行到添加终结器的这行代码,所以终结器都还没添加成功,又怎么会去执行呢?终于我明白过来了,于是调整了代码顺序,把request.addfinalizer(demo_finalizer)放到前面去,然后再接上fixture的代码:如此来看,我们会先看到”running setup code…”的输出,然后看到mysql抛错,最后仍然可以看到”running setup code…”的输出。运行代码验证一下:读到这里,这篇“pytest解读fixtures中yield与addfinalizer区别是什免费云主机域名么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: php使用redis内存不足如何解决

这篇文章主要介绍了php使用redis内存不足如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php使用redis内存不足如何解决文章都会有所收获,下面我们一起来看看吧。 php使用redis内存不足的解决办法:1、通过配免…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/11 08:35
下一篇 03/11 08:35

相关推荐