[파이썬] unittest mock 객체의 assert 메서드들

Python의 unittest 모듈은 단위 테스트를 작성하고 실행하는 데 매우 유용한 기능들을 제공합니다. 이 중에서 unittest.mock 모듈은 특정 함수나 객체를 가짜(mock)로 대체하여 테스트를 진행할 수 있도록 도와줍니다. 이 mock 객체들은 여러 가지 유용한 assert 메서드를 제공하여 우리가 기대하는 동작을 검증할 수 있게 해줍니다. 이번 블로그 포스트에서는 몇 가지 주요한 assert 메서드들을 살펴보겠습니다.

1. assert_called()

assert_called() 메서드는 mock 객체가 호출되었는지를 확인합니다. 다음은 my_function이라는 함수가 호출되는지를 테스트하는 예제입니다.

from unittest.mock import MagicMock

def my_function():
    pass

mock_function = MagicMock()
my_function()
mock_function.assert_called()

위의 코드에서 my_function이 호출되고 난 후 mock_function.assert_called()가 실행되면, mock 객체 mock_function은 성공적으로 호출되었다는 것이 확인됩니다.

2. assert_called_once()

assert_called_once() 메서드는 mock 객체가 한 번만 호출되었는지를 확인합니다. 다음은 my_function이 한 번만 호출되는지를 테스트하는 예제입니다.

from unittest.mock import MagicMock

def my_function():
    pass

mock_function = MagicMock()
my_function()
mock_function.assert_called_once()

위의 코드에서 my_function이 한 번 호출되고 난 후 mock_function.assert_called_once()가 실행되면, mock 객체 mock_function은 한 번만 호출되었다는 것이 확인됩니다.

3. assert_called_with()

assert_called_with() 메서드는 mock 객체가 특정한 인자와 함께 호출되었는지를 확인합니다. 다음은 my_function1 이라는 인자와 함께 호출되는지를 테스트하는 예제입니다.

from unittest.mock import MagicMock

def my_function(argument):
    pass

mock_function = MagicMock()
my_function(1)
mock_function.assert_called_with(1)

위의 코드에서 my_function(1)이 호출되고 난 후 mock_function.assert_called_with(1)가 실행되면, mock 객체 mock_function은 인자 1과 함께 호출되었다는 것이 확인됩니다.

4. assert_called_once_with()

assert_called_once_with() 메서드는 mock 객체가 한 번만 호출되고 특정한 인자와 함께 호출되었는지를 확인합니다. 다음은 my_function1 이라는 인자와 함께 한 번만 호출되는지를 테스트하는 예제입니다.

from unittest.mock import MagicMock

def my_function(argument):
    pass

mock_function = MagicMock()
my_function(1)
mock_function.assert_called_once_with(1)

위의 코드에서 my_function(1)이 한 번만 호출되고 난 후 mock_function.assert_called_once_with(1)가 실행되면, mock 객체 mock_function은 인자 1과 함께 한 번만 호출되었다는 것이 확인됩니다.

5. assert_not_called()

assert_not_called() 메서드는 mock 객체가 호출되지 않았음을 확인합니다. 다음은 my_function이 호출되지 않는지를 테스트하는 예제입니다.

from unittest.mock import MagicMock

def my_function():
    pass

mock_function = MagicMock()
mock_function.assert_not_called()

위의 코드에서 my_function이 호출되지 않았음을 mock_function.assert_not_called()가 실행되면, mock 객체 mock_function은 성공적으로 호출되지 않았음을 확인합니다.

이 외에도 unittest.mock 모듈은 다양한 assert 메서드들을 제공합니다. 이들 메서드를 적절하게 활용하여 단위 테스트를 작성하고 코드의 신뢰성을 확보하는 데 도움을 받을 수 있습니다.