unittest.mock.patch или библиотеки наподобие `pytest-mock` позволяют это сделать.  Пример с `unittest.mock.patch`:
    
import unittest
from unittest.mock import patch
class MyClass:
    def _private_method(self):
        return "original"
    def public_method(self):
        return self._private_method()
class TestMyClass(unittest.TestCase):
    @patch('__main__.MyClass._private_method')
    def test_public_method_with_mocked_private(self, mock_private):
        mock_private.return_value = "mocked"
        instance = MyClass()
        self.assertEqual(instance.public_method(), "mocked")
    Тестирование приватных методов и свойств напрямую считается плохой практикой, поскольку нарушает принципы инкапсуляции и может привести к хрупким тестам. Приватные методы предназначены для внутреннего использования класса и не должны быть частью его публичного API.
Вместо непосредственного тестирования приватных методов и свойств, следует тестировать публичные методы, которые используют эти приватные методы. Это позволит убедиться, что приватная логика работает правильно в контексте использования в публичном API.
Тем не менее, существуют ситуации, когда тестирование приватных методов может быть оправдано (например, сложная логика, которую сложно протестировать через публичные методы). В таких случаях можно использовать следующие подходы, но с осторожностью:
class MyClass:
  def __private_method(self):
    return "Secret!"
# В тестовом файле
obj = MyClass()
result = obj._MyClass__private_method() # Доступ к приватному методу (не рекомендуется!)
      
import pytest
class MyClass:
    def __private_method(self):
        return "Original"
    def public_method(self):
        return self.__private_method() + " Public"
def test_public_method_with_mocked_private(mocker):
    obj = MyClass()
    mocked_private = mocker.patch.object(MyClass, '_MyClass__private_method', return_value="Mocked")
    result = obj.public_method()
    assert result == "Mocked Public"
    mocked_private.assert_called_once()
        В этом примере мы используем `mocker.patch.object`, чтобы заменить приватный метод `__private_method` на мок. Когда вызывается `public_method`, он вызывает мок, который возвращает "Mocked". Таким образом, мы можем проверить, как `public_method` ведет себя с другим возвращаемым значением от приватного метода. Также `mocked_private.assert_called_once()` проверяет, что мок действительно был вызван.
Важно: Всегда старайтесь избегать тестирования приватных методов напрямую. Используйте эти методы только в крайнем случае, когда другие подходы невозможны. Имейте в виду, что тестирование приватных методов делает ваши тесты более хрупкими и сложными в сопровождении.