[Python] 파이썬 단위테스트 Mock 파일 사용하기

참조


소개

안녕하세요. 오늘은 파이썬 Unittest (단위테스트) 에 대해서 공부해 보려고 합니다.

그 중에서도, Mock 데이터 즉 가짜 데이터를 이용한 단위 테스트를 진행하는 방법에 대해서 알려 드리려고 합니다.

Mocking을 이용하면 실제 파일 혹은 데이터가 존재하지 않아도, 가짜로 만들기 때문에 제약사항 없이 단위 테스트를 진행할 수 있다는 장점이 있습니다.

git에 좋은 내용이 있어 해당 내용을 토대로 파이썬에서 Mock 데이터를 이용한 단위테스트를 발견 하였고, 같은 방식으로 테스트 진행 하였습니다.


예제 코드

FileReader.py

  • 다음과 같이 FileReader.py 파이썬 파일 안에 static 메서드로 count_lines 라는 메서드를 만들었습니다.
  • 해당 메서드의 역할은 파일 안의 텍스트 라인을 읽어 들여 총 라인 수를 구하는 메서드 입니다.
class FileReader:

    @staticmethod
    def count_lines(file_path):
        with open(file_path, 'r') as _file:
            file_content_list = _file.readlines()
            print(file_content_list)
            return len(file_content_list)

FileReader_test.py

  • 위에서 FileReader.py 파이썬 파일을 생성하였고, count_lines 메서드도 작성하였습니다.
  • 실제로 해당 메서드가 정상적으로 동작하는지에 대한 단위 테스트 코드를 작성하겠습니다.
  • 이때 mock 파일을 생성하여 내용까지 작성하는 코드도 있으니 참고하시면 되겠습니다.
import unittest
from unittest.mock import patch, mock_open

from lib.FileReader import FileReader


class TestReadFiles(unittest.TestCase):
    def test_count_lines(self):
        file_content_mock = """안녕하세요.
                               파일 테스트 진행합니다.
                               현재 Mocking 파일 테스트 진행 중입니다.
                               만나서 반갑습니다."""
        fake_file_path = 'file/path/mock'

        with patch('lib.FileReader.open'.format(__name__),
                   new=mock_open(read_data=file_content_mock)) as _file:
            actual = FileReader().count_lines(fake_file_path)
            _file.assert_called_once_with(fake_file_path, 'r')

        expected = len(file_content_mock.split('\n'))
        self.assertEqual(expected, actual)


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

이 글을 공유하기

댓글

Designed by JB FACTORY