测试与数据库的连接,测试通过但没有在数据库中创建新实例
Testing connectiong with db, tests passes but no new instance in db created
我想做什么:我想测试我的应用程序是否与数据库正确连接。为此,我使用了这些教程:http://www.baeldung.com/spring-boot-testing http://www.baeldung.com/spring-testing-separate-data-source 所以我正在创建新的 testUser,保存它并检查 userName 找到的用户是否等于我保存的用户。
什么不起作用: 即使测试通过,数据库中也没有新用户出现。我不知道为什么。有什么建议吗?
测试:
package com.shareabook.integration.user;
import com.shareabook.constants.initialNumberOfPoints;
import com.shareabook.model.Points;
import com.shareabook.model.User;
import com.shareabook.repository.PointsRepository;
import com.shareabook.repository.RoleRepository;
import com.shareabook.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@DataJpaTest
public class userTest {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private PointsRepository pointsRepository;
private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
@Test
public void whenFindByUserName_thenReturnUser() {
//given
User testUser = new User();
// Creates new points instance
Points points = new Points();
points.setAmountOfPoints(initialNumberOfPoints.INITIAL_NUMBER_OF_POINTS.getInitialNumberOfPoints());
pointsRepository.save(points);
int tempId = points.getId();
testUser.setUserName("userName");
testUser.setFirstName("firstName");
testUser.setLastName("lastName");
testUser.setPassword(passwordEncoder.encode("P@ssword123"));
testUser.setEmail("emal@email.com");
testUser.setIsBlocked(false);
testUser.setIdpoints(tempId);
testUser.setRoles(Arrays.asList(roleRepository.findByRole("USER")));
userRepository.save(testUser);
//when
User found = userRepository.findByUserName(testUser.getUserName());
//then
assertThat(found.getUserName()).isEqualTo(testUser.getUserName());
}
}
------编辑---------
在评论中提出有用的建议后,我稍微更改了测试,现在它按预期工作了。
package com.shareabook.integration.user;
import com.shareabook.constants.initialNumberOfPoints;
import com.shareabook.model.Points;
import com.shareabook.model.User;
import com.shareabook.repository.PointsRepository;
import com.shareabook.repository.RoleRepository;
import com.shareabook.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringRunner.class)
@SpringBootTest
public class userTest {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private PointsRepository pointsRepository;
private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
@Test
public void whenFindByUserName_thenReturnUser() {
//given
User testUser = new User();
// Creates new points instance
Points points = new Points();
points.setAmountOfPoints(initialNumberOfPoints.INITIAL_NUMBER_OF_POINTS.getInitialNumberOfPoints());
pointsRepository.save(points);
int tempId = points.getId();
testUser.setUserName("userName");
testUser.setFirstName("firstName");
testUser.setLastName("lastName");
testUser.setPassword(passwordEncoder.encode("P@ssword123"));
testUser.setEmail("emal@email.com");
testUser.setIsBlocked(false);
testUser.setIdpoints(tempId);
testUser.setRoles(Arrays.asList(roleRepository.findByRole("USER")));
userRepository.save(testUser);
//when
User found = userRepository.findByUserName(testUser.getUserName());
//then
assertNotNull(found);
assertEquals(testUser.getUserName(), found.getUserName());
}
}
@DataJpaTest 将配置内存中的嵌入式数据库,扫描@Entity 类 并配置 Spring Data JPA 存储库。
它是事务性的,但会在每次测试结束时回滚!
这就是您的数据库中没有数据的原因。
我想做什么:我想测试我的应用程序是否与数据库正确连接。为此,我使用了这些教程:http://www.baeldung.com/spring-boot-testing http://www.baeldung.com/spring-testing-separate-data-source 所以我正在创建新的 testUser,保存它并检查 userName 找到的用户是否等于我保存的用户。
什么不起作用: 即使测试通过,数据库中也没有新用户出现。我不知道为什么。有什么建议吗?
测试:
package com.shareabook.integration.user;
import com.shareabook.constants.initialNumberOfPoints;
import com.shareabook.model.Points;
import com.shareabook.model.User;
import com.shareabook.repository.PointsRepository;
import com.shareabook.repository.RoleRepository;
import com.shareabook.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@DataJpaTest
public class userTest {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private PointsRepository pointsRepository;
private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
@Test
public void whenFindByUserName_thenReturnUser() {
//given
User testUser = new User();
// Creates new points instance
Points points = new Points();
points.setAmountOfPoints(initialNumberOfPoints.INITIAL_NUMBER_OF_POINTS.getInitialNumberOfPoints());
pointsRepository.save(points);
int tempId = points.getId();
testUser.setUserName("userName");
testUser.setFirstName("firstName");
testUser.setLastName("lastName");
testUser.setPassword(passwordEncoder.encode("P@ssword123"));
testUser.setEmail("emal@email.com");
testUser.setIsBlocked(false);
testUser.setIdpoints(tempId);
testUser.setRoles(Arrays.asList(roleRepository.findByRole("USER")));
userRepository.save(testUser);
//when
User found = userRepository.findByUserName(testUser.getUserName());
//then
assertThat(found.getUserName()).isEqualTo(testUser.getUserName());
}
}
------编辑--------- 在评论中提出有用的建议后,我稍微更改了测试,现在它按预期工作了。
package com.shareabook.integration.user;
import com.shareabook.constants.initialNumberOfPoints;
import com.shareabook.model.Points;
import com.shareabook.model.User;
import com.shareabook.repository.PointsRepository;
import com.shareabook.repository.RoleRepository;
import com.shareabook.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringRunner.class)
@SpringBootTest
public class userTest {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private PointsRepository pointsRepository;
private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
@Test
public void whenFindByUserName_thenReturnUser() {
//given
User testUser = new User();
// Creates new points instance
Points points = new Points();
points.setAmountOfPoints(initialNumberOfPoints.INITIAL_NUMBER_OF_POINTS.getInitialNumberOfPoints());
pointsRepository.save(points);
int tempId = points.getId();
testUser.setUserName("userName");
testUser.setFirstName("firstName");
testUser.setLastName("lastName");
testUser.setPassword(passwordEncoder.encode("P@ssword123"));
testUser.setEmail("emal@email.com");
testUser.setIsBlocked(false);
testUser.setIdpoints(tempId);
testUser.setRoles(Arrays.asList(roleRepository.findByRole("USER")));
userRepository.save(testUser);
//when
User found = userRepository.findByUserName(testUser.getUserName());
//then
assertNotNull(found);
assertEquals(testUser.getUserName(), found.getUserName());
}
}
@DataJpaTest 将配置内存中的嵌入式数据库,扫描@Entity 类 并配置 Spring Data JPA 存储库。
它是事务性的,但会在每次测试结束时回滚!
这就是您的数据库中没有数据的原因。