tl; dr -我想编写一个Python unittest
函数,该函数删除文件,运行测试并恢复文件。这会导致竞争条件,因为unittest
并行运行多个测试,并且为一个测试删除和创建文件会混淆同时发生的其他测试。做一个从未平行运行的Python单元测试
长具体的例子:
我有一个Python模块命名converter.py
并已在test_converter.py
相关测试。如果在与converter.py
相同的目录中存在名为config_custom.csv
的文件,则将使用自定义配置。如果没有自定义的CSV配置文件,那么内置converter.py
的默认配置。
我使用Python 2.7标准库中的unittest
编写了一个单元测试来验证此行为。 setUp()
中的单元测试会将config_custom.csv
重命名为wrong_name.csv
,然后它将运行测试(希望使用默认配置),然后在tearDown()
中将文件重命名为应该的方式。
问题: Python单元测试并行运行,我得到了糟糕的竞争条件。文件config_custom.csv
将以非确定性方式在其他单元测试中间重命名。在我运行整个测试套件的90%时间内,至少会导致一个错误或失败。
理想的解决方案是告诉unittest
:不要与其他测试并行运行此测试,此测试是特殊的,需要完全隔离。
我的解决方法是向搜索配置文件的函数添加可选参数。该参数仅由测试套件传递。它会忽略配置文件而不删除它。实际上,删除测试文件更加优雅,这正是我想要测试的。