View Javadoc
1   /*
2    * Copyright (c) 2006 JMockit developers
3    * This file is subject to the terms of the MIT license (see LICENSE.txt).
4    */
5   package mockit.integration.springframework;
6   
7   import edu.umd.cs.findbugs.annotations.NonNull;
8   import edu.umd.cs.findbugs.annotations.Nullable;
9   
10  import mockit.internal.injection.BeanExporter;
11  import mockit.internal.injection.TestedClassInstantiations;
12  import mockit.internal.state.TestRun;
13  
14  import org.springframework.beans.factory.BeanDefinitionStoreException;
15  import org.springframework.web.context.support.StaticWebApplicationContext;
16  
17  /**
18   * A {@link org.springframework.web.context.WebApplicationContext} implementation which exposes the
19   * {@linkplain mockit.Tested @Tested} objects and their injected dependencies declared in the current test class.
20   */
21  public final class TestWebApplicationContext extends StaticWebApplicationContext {
22      @Override
23      @NonNull
24      public Object getBean(@NonNull String name) {
25          BeanExporter beanExporter = getBeanExporter();
26          return BeanLookup.getBean(beanExporter, name);
27      }
28  
29      @NonNull
30      private static BeanExporter getBeanExporter() {
31          TestedClassInstantiations testedClasses = TestRun.getTestedClassInstantiations();
32  
33          if (testedClasses == null) {
34              throw new BeanDefinitionStoreException("Test class does not define any @Tested fields");
35          }
36  
37          return testedClasses.getBeanExporter();
38      }
39  
40      @Override
41      @NonNull
42      public <T> T getBean(@NonNull String name, @Nullable Class<T> requiredType) {
43          BeanExporter beanExporter = getBeanExporter();
44          return BeanLookup.getBean(beanExporter, name, requiredType);
45      }
46  
47      @Override
48      @NonNull
49      public <T> T getBean(@NonNull Class<T> requiredType) {
50          BeanExporter beanExporter = getBeanExporter();
51          return BeanLookup.getBean(beanExporter, requiredType);
52      }
53  }