【问题标题】:javax.naming.NoIntialContextException: for JNDI DataSourcejavax.naming.NoIntialContextException:对于 JNDI 数据源
【发布时间】:2016-01-30 20:12:54
【问题描述】:

我正在为我的一个 Spring 控制器编写一个集成测试。测试包括一个配置文件 (data-access-configuration.xml),其中使用 JNDI 配置了 DataSource。当我运行此测试时,我收到错误error creating bean with name dataSource 嵌套异常NoIntialContextException。下面是我的测试类和配置文件

配置:

<jee:jndi-lookup jndi-name="jobportal_db" id="dataSource"
    expected-type="javax.sql.DataSource">
</jee:jndi-lookup>

测试

@RunWith(value=SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = { "file:WebContent/WEB-INF/dispatcher-servlet.xml",
    "classpath:com/zerosolutions/configuration/service-configuration.xml",
    "classpath:com/zerosolutions/configuration/security-configuration.xml",
    "classpath:com/zerosolutions/configuration/data-access-configuration.xml",
    "classpath:com/zerosolutions/configuration/view-configuration.xml"})
public class TestingFrontController {

@Autowired
private WebApplicationContext wac;

private MockMvc mockMvc;

@Before
public void setUp(){
    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}

@Test
public void getLoginSignupPage() throws Exception{
    mockMvc.perform(get("/login"))
    .andExpect(status().isOk())
    .andExpect(forwardedUrl("login"));
}

}

我该如何解决?

【问题讨论】:

标签: java spring exception datasource spring-test


【解决方案1】:

发生这种情况是因为您在进行单元测试时没有运行容器或 JNDI 命名服务。

我使用单独的测试配置编写单元测试以注入依赖项。我也更喜欢在没有 Spring 的情况下进行注入,所以我可以使用模拟。

我的经验是 Spring bean factory 会极大地减慢测试速度,尤其是当我为每个测试类加载它时。我不再使用 Spring 进行 JDBC 模板之外的单元测试。单元测试应该对依赖项使用模拟。

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 2014-11-14
    • 2013-05-04
    • 2010-12-09
    • 2019-05-15
    • 1970-01-01
    • 2011-09-17
    • 2019-04-10
    • 2015-04-21
    相关资源
    最近更新 更多