【问题标题】:ApplicationContext.getAppContext().getBean("jBeanName") return null in Junit testApplicationContext.getAppContext().getBean("jBeanName") 在 Junit 测试中返回 null
【发布时间】:2020-04-07 12:08:06
【问题描述】:

我确实有这个用@Configuration注释的简单类

@ConfigurationProperties("sample")
@Configuration
public class Sample {

    private String username;
    private String password;
    private String url; 

//Implementation }

为了获取我的网络应用程序 bean 文件,我创建了这个类

@Component
public class AppSpringContext implements ApplicationContextAware {

    private static ApplicationContext context;

    /**
     * Returns the Spring managed bean instance of the given class type if it exists.
     * Returns null otherwise.
     *
     * @param
     * @return
     */
    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {

        // Store ApplicationContext reference to access required beans later on
        AppSpringContext.context = context;
    }

    public static ApplicationContext getAppContext() {
        return context;
    }

}

当我尝试在测试类中实例化示例类时,我得到了一个空指针异常,尽管我能够在主类中成功实例化它

@RunWith(SpringJUnit4ClassRunner.class)
public class SampleTest {



    private Sample getInstance(Sample cfg) {

        if (cfg == null) {
            cfg = (Sample) AppSpringContext.getAppContext().getBean("sample"); //returns  NULL object
        }
        return cfg; }

//Rest of  implementation

}

有什么帮助吗?

【问题讨论】:

  • 你是如何确认Sample bean 被创建的?当你用 @SpringBootTest 注释你的测试类时会发生什么?

标签: java spring-boot junit applicationcontext


【解决方案1】:

更改@ConfigurationProperties("sample") @Configuration

【讨论】:

  • @Component
  • 我正在使用@ConfigurationProperties("sample") 从appl.prop 文件中导入属性,@Configuration 使用@Component 进行元注释,因此@Configuration 类是组件扫描的候选对象,简而言之@987654327 @ 也是 @Component,但 @Component 不能像 @Cofinguration 那样工作
猜你喜欢
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多