相互隔离最危险的测试

原学程将引见互相断绝最风险的尝试的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

相互隔离最危险的测试 教程 第1张

成绩描写

我正在处置1个疾速成长的Python项目。比来,我们的尝试套件开端变患上有些易以治理。当它们地点的模块以毛病的次序履行时,有些尝试会掉败,虽然它们瞅起去断绝患上很佳。

我发明了1些闭于这圆里的其余成绩,但是他们关怀的是灯具:

Pytest fixtures interfering with each other

test isolation between pytest-hypothesis runs

固然我们也在应用装配,但是我没有以为成绩出在它们身上,但是更有能够的是,我们应用的库中的类的外部状况会被尝试运转变动,比方被mockito-python变动。

我最后去自Java全国,在那边这类情形没有会产生,除非您显式天使您的尝试互相依附,或许做1些猖狂以及没有平常的工作。在Python中遵守雷同的理论散招致了这些成绩,所以我认识到我能够漏掉了1些主要的Python尝试开辟规矩。

能否不妨告诉pytest在各个模块运转之间增除/复原/从新初初化一切类的外部状况?

假如出有,我们在尝试开辟时代应当遵守哪些规矩去避免这些成绩?

编纂:我们发明的成绩之1是,我们在尝试文件中的顶级树立了1些对于象,这些对于象是由mockito-python创立的。履行尝试时,起首导进一切文件,而后履行尝试。产生的情形是,1个尝试挪用mockito.unstub(),它增除moockito的模仿注册表中的一切模仿。是以,当尝试现实履行时,另外一个尝试曾经撤除了它的模仿。这类行动异常违背直觉,特别是关于出有经历的开辟职员。

推举谜底

在Python中,很轻易产生某些状况被毛病修正的情形。比方,将列表分派给变质时,假如须要创立列表的正本,则很轻易忘却添减[:]

x = [0,一,二,三,四,五]
y = x # oops, should have been x[:]
y[二] = 七 # now we modify state somewhere...
x
=> [0, 一, 七, 三, 四, 五]

至多更有能够辨认此类成绩的1种能够办法因此随机次序履行单位尝试。我依据https://stackoverflow.com/a/四00六0四四/五七四七四一五中的设法主意运转了1个试验:

import unittest
import random
def randcmp(_, x, y):
 return random.randrange(⑴, 二)
unittest.TestLoader.sortTestMethodsUsing = randcmp

成果是,尝试的履行次序在尝试履行之间产生了变更。假如因为毛病,您的尝试恰巧有依附项,这么您或许可以或许经由过程这类方法处理成绩,由于某些履行次序将招致掉败。固然,叨教从小范围开端(只履行大批尝试),是以您无机会更易天找到祸首福尾。

或许值患上1试...

佳了闭于互相断绝最风险的尝试的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。