gpt4 book ai didi

java - 当与 JUnit 一起使用方法时,jdbcTemplate 为 null

转载 作者:行者123 更新时间:2023-12-02 03:42:55 25 4
gpt4 key购买 nike


我目前从事 Spring 项目,并且正在编写 JUnit 测试。我的问题是,方法 getQuestions 中的 jdbcTemplate 为 null(使用调试器测试),因此它没有从数据库接收任何数据。
其他一切都很好。这是我的代码:

我在 Controller 类的开头执行此操作:

@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}

@Autowired
private JdbcTemplate jdbcTemplate;

获取问题:

@PostMapping("/question")
public List<String> getQuestions(@RequestBody int number){

String query = "SELECT t.question " +
"FROM question as t " +
"ORDER BY RAND() " +
"LIMIT " + number + ";";

this.questionList = jdbcTemplate.queryForList(query, String.class);
this.index = number;

return questionList;
}

我在测试类开始时执行此操作:

private MockMvc mockMvc;

@InjectMocks
private MainController controller;

@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.standaloneSetup(controller)
.build();
}

测试方法:

@Test
public void getQuestions() throws Exception{
int num = 4;

mockMvc.perform(
MockMvcRequestBuilders.post("/api/question")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(asJsonString(num))
.accept(MediaType.APPLICATION_JSON_UTF8)
).andExpect(MockMvcResultMatchers.status().isOk());
}

现在我不知道如何使jdbcTemplate不为空。在常规应用中,该方法也运行得很好。

最佳答案

您需要为测试环境配置数据源。如果您使用 Spring Boot,则尝试创建位于 test/resources 中的 application.properties(Spring Boot 将完成其他所有操作)

例如,使用h2数据库

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa

阅读application.properties文件中有关数据源属性的部分https://www.baeldung.com/spring-testing-separate-data-sourceSpring Boot Datasource in unit tests

或者,如果您不使用 Spring Boot,那么您需要配置环境以另一种方式进行测试,这取决于项目中的约定和规则。我认为,无论如何,您需要找到用于实际设置的数据库配置(它将是 dataSource bean 和所有相关的东西)并尝试模拟它(添加 TestConfiguration 并在那里替换所有需要的 bean(或使用 @Mock 注释)

关于java - 当与 JUnit 一起使用方法时,jdbcTemplate 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56824178/

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