gpt4 book ai didi

java - 尝试使用 SpringRunner 进行单元测试时出现 NullPointer 异常

转载 作者:行者123 更新时间:2023-12-02 10:04:24 30 4
gpt4 key购买 nike

您好,我正在尝试使用 SpringRunner.class 运行我的单元测试。我正在测试类中为 jdbcTemaplte 创建一个新实例。我正在使用 H2 DB 进行单元测试,并且我能够使用 jdbcTemplate 实例来创建或更新表。它工作正常。但是当它进入实际的类时,它的测试 jdbcTemplate 为 null,这会抛出 NullPointerException

下面是代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyClassTest {

@InjectMocks
private ClassToTest classToTest;

@Autowired
private JdbcTemplate jdbcTemplate;

@org.springframework.context.annotation.Configuration
static class Config {

@Bean(name = "jdbcTemplate")
public JdbcTemplate orderService() {
BasicDataSource dataSourceConfig = new BasicDataSource();
dataSourceConfig.setDriverClassName("org.h2.Driver");
dataSourceConfig.setUrl("jdbc:h2:mem:db");
dataSourceConfig.setUsername("someUserName");
dataSourceConfig.setPassword("somePassword");

return new JdbcTemplate(dataSourceConfig);
}
}
@Before
public void setUp() throws Exception {
//Use the jdbcTemplate to create Queries in H2 which works fine.
}

}

ClassToTest.java

 public class ClassToTest{
@Autowired
JdbcTemplate jdbcTemplate;

//someMethod in DAO using jdbcTemplate to make sql Operations.

}

ClassToTest 中的 JDBC 模板为 null,并且在尝试测试该方法时抛出 nullPointerException。

我只是不确定为什么 Autowire 没有连接我创建的依赖项。我尝试在必要时使用 @Primary 显式获取此 jdbcTemplate,但不确定为什么它不起作用。

任何建议都会有帮助。提前致谢。

最佳答案

您正在测试的对象上使用 @InjectMocks 注释,但您没有模拟任何内容,而是想要加载 spring 上下文并将 jdbcTemplate bean 注入(inject)其中。尝试在 ClassToTest 上用 @Autowired 替换 @InjectMocks 并删除 jdbcTemplate 字段。 jdbcTemplate bean 应该在 Config 中初始化并 Autowiring 到 ClassToTest 中。此外,您可能想在 @ContextConfiguration 中指定 Config 类。希望对您有所帮助。

关于java - 尝试使用 SpringRunner 进行单元测试时出现 NullPointer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55406193/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com