Python多线程单元测试

1 投票
1 回答
3726 浏览
提问于 2025-04-16 14:25

我想对几个主要进行文件输入和输出的类进行单元测试。此外,我还想在多个核心上进行测试(--jobs=4)。

问题是,这些类创建的文件经常有相同的名字,导致在多个线程中混淆。我现在的做法是,每个单元测试都在一个单独的目录中运行,像这样:

def test(self):
  if os.path.exists("UniqueDir"):
    os.system("rm -rf UniqueDir")
  os.mkdir("UniqueDir")
  os.chdir("UniqueDir")
  #Do the actual testing
  os.chdir("..")
  os.rmdir("UniqueDir")

这样做的缺点很明显:

  1. 每个测试必须有一个独特的目录名称
  2. 每个测试都有这个额外的源代码,这看起来真的不太好

我可以用什么方法来1. 将我的测试分开,但2. 以更优雅的方式做到这一点呢?

任何帮助、建议等都非常感谢!

祝好,Woltan

1 个回答

7

我建议使用unittest模块来构建类,像这样:

import unittest
from tempfile import mkdtemp

class Test(unittest.TestCase):

    def setUp(self):
        self.tempdir = mkdtemp()
        os.chdir(self.tempdir)

    def tearDown(self):
        os.rmdir(self.tempdir)

    def testName(self):
        #Do the actual testing
        pass

if __name__ == "__main__":
    unittest.main()

另外,你可以加入多线程功能,创建4个线程。

编辑:去掉了os.mkdir,因为mkdtemp会创建一个临时目录,所以之前的做法是不对的。谢谢Sebastian。

撰写回答