Spring Boot - DI - 单元测试

Posted

技术标签:

【中文标题】Spring Boot - DI - 单元测试【英文标题】:Spring boot - DI - Unit testing 【发布时间】:2015-12-20 15:50:22 【问题描述】:

我有 DI 链(DbConfig -> Repository -> Component -> RestController)

DBConfig 中的数据源在存储库中是自动连线的。 Repository 在 Component... 等中是 AutoWired。

应用程序类 - CtnStatusCheckerApplication.class

DataSource 创建查找 JNDI ("eis.OT4.SBL_DS")。我正在模拟 DataSource 并将其放入 Spring JNDI 树中。

这是我的单元测试(在 Groovy 中):

 @RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = CtnStatusCheckerApplication.class)
class SiebelRepositoryTest 
    @Autowired
    SiebelRepository siebelRepository

    @Autowired
    @Qualifier("sblDataSource")
    DataSource sblDataSource

    @BeforeClass
    public static void setUpClass() throws Exception
        DataSource ds = mock(DataSource.class)
        SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder()
        builder.bind("eis.OT4.SBL_DS",ds)
        builder.activate()
    

    @Test
    public void testContext()
        assert siebelRepository != null
        assert sblDataSource != null
        println Whitebox.getInternalState(siebelRepository,"sblDataSource") // prints "null" why?
    

1 - 为什么 siebelRepository 中的 sblDataSource 为空? 2 - 在这种情况下,@SpringApplicationConfiguration 应该用哪个类初始化?***对象还是每个单独的 Bean? (如服务、组件、存储库等)

【问题讨论】:

【参考方案1】:

请试试这个:-

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = CtnStatusCheckerApplication)
@WebAppConfiguration
class SiebelRepositoryTest 

【讨论】:

以上是关于Spring Boot - DI - 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 学习之二(spring boot单元测试)

spring boot10.spring boot下的单元测试

spring boot单元测试spring context重复加载问题

Spring Boot使用单元测试

Spring Boot 中的单元测试

Spring Boot 单元测试示例