【问题标题】:How to test afterPropertiesSet method in my spring application?如何在我的 Spring 应用程序中测试 afterPropertiesSet 方法?
【发布时间】:2013-09-12 18:04:59
【问题描述】:

我正在为我的 spring 应用程序编写一些 junit 测试。下面是我实现 InitializingBean 接口的应用程序,

public class InitializeFramework implements InitializingBean {


    @Override
    public void afterPropertiesSet() throws Exception {

        try {

        } catch (Exception e) {

        }
    }
}

现在我想从我的 junit 测试中调用 afterPropertiesSet 方法,但不知何故,我无法理解这样做的正确方法是什么?我想,我可以使用反射来调用这个方法,但我不认为,这是正确的方法吗?

谁能给我一个简单的例子,说明如何编写一个简单的junit测试来测试InitializeFramework类中的afterPropertiesSet方法?

【问题讨论】:

  • 你想只调用方法吗?还是你想让 Spring 来做?
  • 它们之间有什么区别?这就是实际流程的工作方式- afterPropertiesSet 方法将调用一个方法-a,然后方法-a 将调用其他方法...所以我想编写 junit 测试来测试实际流程...
  • afterPropertiesSet() 是一种正常的方法。如果你单独测试你的 bean,你可以简单地从你的测试代码中调用它。
  • 如果您有InitializeFramework 的实例,只需调用afterPropertiesSet 即可。 Spring 的上下文类设置为在 InitializingBean 类型的对象上调用 afterPropertiesSet

标签: java spring junit


【解决方案1】:

InitializingBean#afterProperties() 没有任何ApplicationContext 只是另一种手动实现和调用的方法。

@Test
public void afterPropertiesSet() {
    InitializeFramework framework = new InitializeFramework();
    framework.afterPropertiesSet();
    // the internals depend on the implementation
}

Spring 的BeanFactory 实现将检测上下文中类型为InitializingBean 的实例,并在设置对象的所有属性后调用afterPropertiesSet() 方法。

您也可以通过 ApplicationContext 实现来构造 InitializeFramework bean 来测试它。

说你有

@Configuration
public class MyConfiguration {
    @Bean
    public InitializeFramework initializeFramework() {
        return new InitializeFramework();
    }
}

在测试中的某个地方(虽然不是真正的 junit,更多的是集成测试)

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);

当上下文加载时,您会注意到InitializeFramework bean 的afterPropertiesSet() 方法被调用。

【讨论】:

  • 感谢 Sotirios 的建议。现在对我来说这很有意义..有什么办法,你可以为这个语句提供一个例子You can test that too by having your InitializeFramework bean be constructed by an ApplicationContext implementation.我可能也想尝试这种方法 bcoz ,我正在从 bean 所在的那个 xml 文件中传递某些属性构造..
  • @TrekkieTechieT-T 查看我的编辑。此外,没有什么可以阻止您自己调用afterPropertiesSet()(并可能缓存结果)。
  • @TrekkieTechieT-T 这也有助于理解FactoryBean 是什么。阅读其javadoc
猜你喜欢
  • 2017-12-30
  • 1970-01-01
  • 2019-09-05
  • 2013-11-16
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
相关资源
最近更新 更多