[파이썬] unittest 파일 시스템과 unittest

unittest

Unittest은 파이썬에서 제공하는 테스트 프레임워크로, 코드의 일부분을 단위(Unit)별로 테스트하는 데 사용됩니다. unittest를 사용하여 코드의 각각의 기능이 올바르게 동작하는지 검증할 수 있습니다.

이번 블로그 포스트에서는 unittest의 파일 시스템과 관련된 기능에 대해 알아보겠습니다. 파일 시스템은 많은 프로젝트에서 중요한 역할을 수행하며, 파일을 읽거나 쓰는 등의 동작을 테스트하는 것은 매우 중요합니다.

파일 시스템 테스트하기

Unittest를 사용하여 파일 시스템과 관련된 기능을 테스트하는 방법을 살펴보겠습니다. 예를 들어, 다음과 같이 파일을 읽어오는 함수가 있다고 가정해봅시다.

import os

def read_file(file_path):
    if not os.path.isfile(file_path):
        raise FileNotFoundError(f"File '{file_path}' does not exist.")
        
    with open(file_path, 'r') as file:
        return file.read()

위의 read_file 함수는 파일이 존재하지 않으면 FileNotFoundError를 발생시킵니다. 이 함수를 테스트해보기 위해 unittest를 사용할 수 있습니다.

import unittest
import tempfile

class TestFileSystem(unittest.TestCase):

    def tearDown(self):
        # 테스트가 끝나면 생성한 임시 파일 삭제
        os.remove(self.file_path)

    def test_read_file(self):
        content = "Hello, world!"

        # 임시 파일 생성
        with tempfile.NamedTemporaryFile(delete=False) as file:
            file.write(content.encode('utf-8'))
            self.file_path = file.name

        # 파일 읽어오기 테스트
        result = read_file(self.file_path)
        self.assertEqual(result, content)

    def test_file_not_found(self):
        # 존재하지 않는 파일을 넘겨주었을 때 FileNotFoundError 발생하는지 테스트
        with self.assertRaises(FileNotFoundError):
            read_file("nonexistent_file.txt")

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

위의 테스트 클래스는 unittest.TestCase 클래스를 상속받아 작성되었습니다. 테스트 메소드는 test_로 시작하는 이름을 가져야 하며, 각 테스트 메소드는 파일 시스템을 사용하여 기능을 테스트합니다.

또한, tearDown 메소드를 사용하여 테스트가 끝난 후에 임시 파일을 삭제할 수 있습니다.

실행 결과

위의 테스트 파일을 실행하면 다음과 같은 결과가 출력됩니다.

..
----------------------------------------------------------------------
Ran 2 tests in 0.003s

OK

..은 두 개의 테스트가 성공했음을 의미합니다.

결론

Unittest를 사용하여 파일 시스템과 관련된 기능을 효율적으로 테스트할 수 있습니다. 파일이나 디렉토리 생성, 읽기, 쓰기, 삭제 등의 동작을 테스트할 때에도 unittest를 통해 안정적인 코드를 작성할 수 있습니다. unittest를 사용하여 코드의 견고성을 향상시키고, 버그를 예방하는 데 도움이 될 것입니다.