Java 来自服务层的单元测试CRUD方法的意外结果
我试图从我的服务层对crud方法进行单元测试,我已经编写了正确的代码(我想),但是AssertTrue给出了与我预期相反的结果。(java.lang.AssertionError:) 我的测试代码如下所示: 学生服务测试Java 来自服务层的单元测试CRUD方法的意外结果,java,unit-testing,spring-boot,spring-mvc,junit,Java,Unit Testing,Spring Boot,Spring Mvc,Junit,我试图从我的服务层对crud方法进行单元测试,我已经编写了正确的代码(我想),但是AssertTrue给出了与我预期相反的结果。(java.lang.AssertionError:) 我的测试代码如下所示: 学生服务测试 @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("test") @SpringBootTest public class StudentServiceTest { private static final
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("test")
@SpringBootTest
public class StudentServiceTest {
private static final String STUDENT_NAME = "Henkie";
@Autowired
private StudentServiceImpl studentService;
@Autowired
private StudentRepository studentRepository;
@Test
public void createStudent(){
//arrange
Student student = new Student();
student.setStudentName(STUDENT_NAME);
studentService.save(student);
List<Student> students = studentService.findAll();
assertNotNull(students);
assertTrue("created a student" ,students.contains(student));
}
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles(“测试”)
@春靴测试
公共班级学生服务测试{
私有静态最终字符串STUDENT\u NAME=“Henkie”;
@自动连线
私人学生服务impl studentService;
@自动连线
私立学校;私立学校;
@试验
公立学校学生(){
//安排
学生=新生();
student.setStudentName(学生名);
学生服务。保存(学生);
List students=studentService.findAll();
assertNotNull(学生);
assertTrue(“创建了一个学生”,students.contains(student));
}
学生服务
public interface StudentService {
List<Student> findAll();
Student save(Student student);
Optional<Student> findById(Long id);
void deleteById(Long id);
Iterable<Student> findAllIteratable();
}
公共接口学生服务{
列出findAll();
学生储蓄(学生);
可选的findById(长id);
void deleteById(长id);
Iterable findalReadable();
}
StudentServiceImpl
@Service
@RequiredArgsConstructor
public class StudentServiceImpl implements StudentService {
@Autowired
private final StudentRepository studentRepository;
public List<Student> findAll() {
return Lists.newArrayList(studentRepository.findAll());
}
public Student save(Student student) {
return studentRepository.save(student);
}
public Optional<Student> findById(Long id) {
return studentRepository.findById(id);
}
public void deleteById(Long id) {
studentRepository.deleteById(id);
}
}
@服务
@所需参数构造函数
公共类StudentServiceImpl实现StudentService{
@自动连线
私人期末考试预备课程预备课程预备课程;
公共列表findAll(){
return list.newArrayList(studentRepository.findAll());
}
公共学生储蓄(学生){
返回studentRepository.save(学生);
}
公共可选findById(长id){
return studentRepository.findById(id);
}
公共void deleteById(长id){
studentRepository.deleteById(id);
}
}
StudentRepository
public interface StudentRepository extends CrudRepository<Student, Long> {
}
公共界面StudentRepository扩展了crudepository{
}
调试完成后,学生被成功创建,并被添加到列表中Student@10172,并在学生列表中,将其保存在Student@10482.列表中以前的所有条目都是以前测试尝试的结果
遗憾的是,我无法发表评论,因为我没有代表,但是……如果你有学生,你将其添加到持久化对象中,然后读回,它出现在集合中。那么唯一真正需要问的问题是,你是否覆盖学生类中的哈希代码和相等值
否则contains将查找相同的对象,而不是学生的相同表示形式。是的,如@Alex所述,您需要添加并覆盖
equals
和hashCode
。我看到您使用的是Lombok
,因此您只需在学生
cla上添加@Data
ss和您的测试将成功。感谢您的回复!遗憾的是,在我的学生课堂上添加@Data并没有改变任何事情。请参阅(关于@Data
关于@Entity
的原因可能是一个坏主意)和(关于实体如何编写等于和hashCode
),好的@M.Deinum。