@SpringBootTestclassUserMapperTest{@AutowiredprivateUserMapper userMapper;@Testvoidinsert(){UserDO user =newUserDO();
user.setName("John");
user.setAge(30);
userMapper.insert(user);assertNotNull(user.getId(),"Insert should generate ID");UserDO retrievedUser = userMapper.selectById(user.getId());assertNotNull(retrievedUser,"User should be retrieved after insertion");assertEquals("John", retrievedUser.getName(),"Name should match");assertEquals(30, retrievedUser.getAge(),"Age should match");}...}
2.1 示例(报错:Failed to replace DataSource with an embedded database for tests)
@MybatisTestclassUserMapperSimpleTest{@AutowiredprivateUserMapper userMapper;@TestvoiddeleteById(){UserDO user =newUserDO();
user.setName("Alice");
user.setAge(25);
userMapper.insert(user);Integer userId = user.getId();assertNotNull(userId,"Insert should generate ID");
userMapper.deleteById(userId);UserDO deletedUser = userMapper.selectById(userId);assertNull(deletedUser,"User should be deleted");}}
报错:Caused by: java.lang.IllegalStateException: Failed to replace DataSource with an embedded database for tests. If you want an embedded database please put a supported one on the classpath or tune the replace attribute of @AutoConfigureTestDatabase.
原因:在测试中 Spring Boot 尝试替换数据源为一个内嵌的数据库,但是它找不到一个支持的内嵌数据库。
@MybatisTest@AutoConfigureTestDatabase(replace =AutoConfigureTestDatabase.Replace.NONE)classUserMapperSimpleTest{@AutowiredprivateUserMapper userMapper;@Testvoidinsert(){UserDO user =newUserDO();
user.setName("John");
user.setAge(30);
userMapper.insert(user);assertNotNull(user.getId(),"Insert should generate ID");UserDO retrievedUser = userMapper.selectById(user.getId());assertNotNull(retrievedUser,"User should be retrieved after insertion");assertEquals("John", retrievedUser.getName(),"Name should match");assertEquals(30, retrievedUser.getAge(),"Age should match");}@TestvoiddeleteById(){UserDO user =newUserDO();
user.setName("Alice");
user.setAge(25);
userMapper.insert(user);Integer userId = user.getId();assertNotNull(userId,"Insert should generate ID");
userMapper.deleteById(userId);UserDO deletedUser = userMapper.selectById(userId);assertNull(deletedUser,"User should be deleted");}}
我测试了下,@Service标注的类确实没法注入了。
@MybatisTest@AutoConfigureTestDatabase(replace =AutoConfigureTestDatabase.Replace.NONE)classUserMapperSimpleTest{@AutowiredprivateUserMapper userMapper;@Autowired(required =false)privateIUserService userService;@TestvoidtestUserServiceNotInjected(){assertNull(userService,"User service should not be injected");}@TestvoidtestUserMapperInjected(){assertNotNull(userMapper,"User mapper should be injected");}}