docstr: Test that our error messages are extra-friendly when a ModuleNotFoundError
  error is thrown for certain missing packages.
code: def test_friendly_error_with_certain_missing_dependencies(
      self, missing_module, pypi_package, patched_create_connection
  ):
      """Test that our error messages are extra-friendly when a ModuleNotFoundError
      error is thrown for certain missing packages.
      """
  
      patched_create_connection.side_effect = ModuleNotFoundError(
          f"No module named '{missing_module}'"
      )
  
      with pytest.raises(ModuleNotFoundError) as e:
          connection_factory("my_connection", MockConnection)
      assert str(e.value) == (
          f"No module named '{missing_module}'. "
          f"You need to install the '{pypi_package}' package to use this connection."
      )
  
imports: import os
  import sys
  import threading
  import unittest
  from unittest.mock import MagicMock, mock_open, patch
  import pytest
  from parameterized import parameterized
  from streamlit.connections import BaseConnection, SnowflakeConnection, SnowparkConnection, SQLConnection
  from streamlit.errors import StreamlitAPIException
  from streamlit.runtime.caching.cache_resource_api import _resource_caches
  from streamlit.runtime.connection_factory import _create_connection, _get_first_party_connection, connection_factory
  from streamlit.runtime.scriptrunner import add_script_run_ctx
  from streamlit.runtime.secrets import secrets_singleton
  from tests.testutil import create_mock_script_run_ctx
label_desc: Use image node_id 15 for calling the ConnectionFactoryTest obj's underlying member method code with example usage: obj.test_friendly_error_with_certain_missing_dependencies(missing_module, pypi_package, patched_create_connection) without return types