【发布时间】: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? (如服务、组件、存储库等)
【问题讨论】:
标签: spring unit-testing dependency-injection spring-boot mockito