title: How do I test code calling static factory methods with or without Mocks?
body: <p>I have a dilemma trying to solve the following test. The class is a toggle created through the Togglz library. I'm catching the feature manager method execution because I'm using a JDBCStateReporsitory to read the toggle value and if something goes wrong with the DB I have to be able to return the default value of the toggle with the <code>@EnabledByDefault</code> annotation.</p>
  
  <pre><code>@Slf4j
  public enum PocToggle {
  
      @EnabledByDefault
      USE_MY_FEATURE;
  
      public boolean isActive() {
  
          FeatureManager featureManager = FeatureContext.getFeatureManager();
  
          try {
              return featureManager.isActive(this);
          } catch (RuntimeException ignored) {
              if (log.isWarnEnabled()) {
                  log.warn(String.format("Failed to retrieve feature '%s' state", this.name()));
              }
  
              FeatureMetaData metaData = featureManager.getMetaData(this);
              FeatureState featureState = metaData.getDefaultFeatureState();
  
              return featureState.isEnabled();
          }
      }
  
  }
  </code></pre>
  
  <p>I have no clue of how to do it because an object created by an inner utility static method doesn't allow me to Stub or Mock it. I just created the true and false paths of the test, but the test trying to cover the exception path is not working throwing me a <code>Expected exception of type 'java.lang.IllegalStateException', but no exception was thrown</code> message.</p>
  
  <pre><code>class PocToggleSpecification extends Specification {
  
      @Rule
      private TogglzRule toggleRule = TogglzRule.allEnabled(PocToggle.class)
  
      def "Should toggle to use my feature when it is enabled"() {
  
          when:
          toggleRule.enable(USE_MY_FEATURE)
  
          then:
          USE_MY_FEATURE.isActive()
      }
  
      def "Should toggle to not to use my feature when it is disabled"() {
  
          when:
          toggleRule.disable(USE_MY_FEATURE)
  
          then:
          !USE_MY_FEATURE.isActive()
      }
  
      def "Should throw an exception when something goes wrong"() {
  
          given:
          toggleRule.enable(USE_MY_FEATURE)
  
          FeatureManager featureManager = Stub()
          featureManager.isActive() &gt;&gt; { throw new IllegalStateException() }
  
          def featureContext = Spy(FeatureContext)
          featureContext.getFeatureManager() &gt;&gt; featureManager
  
          when:
          USE_MY_FEATURE.isActive()
  
          then:
          thrown IllegalStateException
      }
  
  }
  </code></pre>
  
  <p>Could you please help me to solve this kind of test?</p>