我正在為 IT 課程開發 REST 應用程式。要求之一是使用 Spring-JDBC,所有查詢都存盤在單獨的屬性檔案中。這是我的 UserDaoImpl 的一部分:
@Repository
@RequiredArgsConstructor
@PropertySource(value = "classpath:/user_queries.properties")
@Log
public class UserDaoImpl implements UserDao {
private final NamedParameterJdbcTemplate template;
private final RowMapper<User> rowMapper;
@Value("${find.by_id}")
private String findById;
@Override
public Optional<User> findById(int id) {
SqlParameterSource param = new MapSqlParameterSource("id", id);
User user = null;
try {
user = template.queryForObject(findById, param, BeanPropertyRowMapper.newInstance(User.class));
} catch (DataAccessException ex) {
String.format("User with id - %d, not found.", id);
}
return Optional.ofNullable(user);
}
}
所有方法都可以正常作業,但是當我將測驗寫入此類時就開始出現問題:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TestDBConfiguration.class})
public class UserDaoTest {
@Autowired
DataSource dataSource;
@Test
public void findByIdTest() {
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(dataSource);
UserRowMapper userMapper = new UserRowMapper();
UserDao userDao = new UserDaoImpl(template, userMapper);
User user = new User(1, "John", "Doe",
"$2a$04$MzVXtd4o0y4DOlyHMMLMDeE4/eezrsT5Xad.2lmGr/NkCpwBgvn3e",
"[email protected]", true);
assertEquals(Optional.of(user), userDao.findById(1));
}
}
當我運行此測驗時,我的findById始終為空。有沒有辦法運行這個測驗并將所有查詢保存在單獨的檔案中?
uj5u.com熱心網友回復:
由于您UserDaoImpl使用 Spring 注釋(@Value、@PropertySource等),您必須通過 Spring 對其進行初始化以啟用它們的注入。否則,您必須自己手動提供所有這些值。
所以在你的測驗中你應該注入 DAO 本身:
@Autowired
private UserDao userDao;
或者,如果您想采用手動方式(不推薦),請允許findById通過建構式(推薦)以與傳遞template, userMapper.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/395331.html
標籤:爪哇 测试 spring-jdbc
上一篇:React通過提交按鈕測驗axios回應資料觸發器的簡單方法
下一篇:DBT-測驗列值驗證特定日期格式
