code: def test_invalid_obs_shape(self, obs_dim):
      boxEnv = GymEnv(DummyDiscreteEnv(obs_dim=obs_dim))
      with pytest.raises(ValueError):
          DiscreteCNNQFunction(
              env_spec=boxEnv.spec,
              filters=((5, (3, 3)),),
              strides=(2,),
              dueling=False,
          )
  
imports: import pickle
  from unittest import mock
  import numpy
  import pytest
  import tensorflow
  from garage.envs import GymEnv
  from garage.tf.models import CNNModel
  from garage.tf.q_functions import DiscreteCNNQFunction
  from tests.fixtures import TfGraphTestCase
  from tests.fixtures.envs.dummy import DummyDiscreteEnv, DummyDiscretePixelEnv
  from tests.fixtures.models import SimpleCNNModel, SimpleCNNModelWithMaxPooling, SimpleMLPModel
label_desc: Use image node_id 3 for calling the TestDiscreteCNNQFunction obj's underlying member method code with example usage: obj.test_invalid_obs_shape(obs_dim) without return types