我正在尝试对服务层中的crud方法进行单元测试,我编写了正确的代码(我认为),但是AssertTrue给了我所期望的相反结果。(java.lang.AssertionError:)>
我的测试代码如下:
StudentServiceTest
@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));
}
StudentService
public interface StudentService {
List<Student> findAll();
Student save(Student student);
Optional<Student> findById(Long id);
void deleteById(Long id);
Iterable<Student> findAllIteratable();
}
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);
}
}
StudentRepository
public interface StudentRepository extends CrudRepository<Student, Long> {
}
调试后,可以看到该学生已成功完成,并且已添加到列表中。但是可以看到,它保存在Student @ 10172下,在学生列表中,它保存在Student @ 10482下。列表中所有先前的条目都是先前测试的结果。
答案 0 :(得分:1)
由于我没有代表,所以我无法发表评论,但是...如果您有学生,则将其添加到持久对象中,然后您将其读回,并且它存在于集合中。那么,唯一真正要问的问题是,您是否覆盖哈希代码并在Student类中等于?
否则,包含将寻找相同的对象,而不是学生的相同表示。