如何使用__enter__ / __exit__方法对测试类进行单元化?

时间:2014-10-25 00:26:21

标签: python unit-testing with-statement python-unittest

我是单元测试的新手,我正在尝试找到一种方法来测试with关键字在我的对象中是否正常工作。

在这种情况下,我的对象有一个__enter__方法,它创建一个临时目录和__exit__方法,它应该销毁它。 (它还有一个do_stuff方法,我只包括测试写入临时目录。)

我不完全确定如何进行测试。我已经检查了unittest模块,甚至之前为基本方法编写了一些测试,但我不确定在这种情况下最好的方法是什么......或者这是否有意义。无论如何,这是我的对象代码:

import shutil
import tempfile
import os
import glob

class MyObj(object):
    def __enter__(self):
        self.tmpdir = tempfile.mkdtemp(dir='.')
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        shutil.rmtree(self.tmpdir)

    def do_stuff(self):
        new = os.path.join(self.tmpdir, 'new_file.txt')
        with open(new, 'w') as nf:
            nf.write('testing')
        print(glob.glob(self.tmpdir + '/*'))

myobj = MyObj()
with myobj as x:
    x.do_stuff()

1 个答案:

答案 0 :(得分:1)

如果要测试MyObj是否与with语句一起使用,并且创建/删除临时目录,请在测试方法中使用with语句:

import unittest


class TestMyObj(unittest.TestCase):

    def test_myobj_with_statement__should_create_delete_temp_directory(self):
        with MyObj() as obj:
            # Directory is created
            self.assertTrue(os.path.isdir(obj.tmpdir))
        # Directory is gone
        self.assertFalse(os.path.isdir(obj.tmpdir))

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