code: def test_ObjectiveThresholdFail(self) -> None:
      logger_name = OUTCOME_CONSTRAINT_PATH + ".logger"
      with mock.patch(logger_name) as mock_warning:
          ObjectiveThreshold(
              metric=self.minimize_metric,
              op=ComparisonOp.GEQ,
              bound=self.bound,
          )
          mock_warning.debug.assert_called_once_with(
              CONSTRAINT_WARNING_MESSAGE.format(**LOWER_BOUND_MISMATCH)
          )
      with mock.patch(logger_name) as mock_warning:
          ObjectiveThreshold(
              metric=self.maximize_metric,
              op=ComparisonOp.LEQ,
              bound=self.bound,
          )
          mock_warning.debug.assert_called_once_with(
              CONSTRAINT_WARNING_MESSAGE.format(**UPPER_BOUND_MISMATCH)
          )
  
imports: from unittest import mock
  from ax.core.metric import Metric
  from ax.core.outcome_constraint import CONSTRAINT_WARNING_MESSAGE, LOWER_BOUND_MISMATCH, ObjectiveThreshold, OutcomeConstraint, ScalarizedOutcomeConstraint, UPPER_BOUND_MISMATCH
  from ax.core.types import ComparisonOp
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 4 for calling the ObjectiveThresholdTest obj's underlying member method code with example usage: obj.test_ObjectiveThresholdFail() without return types