多线程中的 Python 单元测试

发布于 2024-10-26 04:42:57 字数 541 浏览 2 评论 0原文

我想对几个主要执行文件输入和输出的类的功能进行单元测试。此外,我想在多个核心上执行此操作(--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. 以一种更优雅的方式进行?

如有任何帮助、建议等,我们将不胜感激!

切里奥·沃尔坦

I would like to unit-test the functionality of a few classes that mainly do file in- and output. Furthermore I would like to do that on multiple cores (--jobs=4).

The problem is, that the files that are created by the classes often have the same name and they get mixed up in multiple threads. What I do currently is that I run each unit-test in a separate directory like so:

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")

The downsides are very obvious:

  1. Each test must receive a unique directory name
  2. Each test has this overhead of source which really is not pleasant to look at at all

What approach could I use to 1. separate my tests from one another but 2. do it in a more elegant way?

Any help, suggestion etc. is appreciated!

Cherio Woltan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

春风十里 2024-11-02 04:42:57

我建议使用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 创建了一个临时目录,所以它是假的。谢谢塞巴斯蒂安。

I would suggest to use the unittest module and build the classes like this:

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()

Additionally you could add multiprocessing to create 4 threads.

Edit: removed the os.mkdir because mkdtemp creates a temp directory so it's bogus. Thx Sebastian.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文