当前位置: 首页 > 知识库问答 >
问题:

来自服务层的单元测试CRUD方法的意外结果

籍光熙
2023-03-14

我正在尝试从我的服务层对crud方法进行单元测试,我已经写了正确的代码(我认为),但是AssertTrue给了我与我预期相反的结果。(java.lang.AssertionError:)

我的测试代码如下:

学生服务测试

@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));
    }

学生服务

public interface StudentService {

    List<Student> findAll();

    Student save(Student student);

    Optional<Student> findById(Long id);

    void deleteById(Long id);

    Iterable<Student> findAllIteratable();      
}

学生服务

@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);
    }

}

学生资源库

public interface StudentRepository extends CrudRepository<Student, Long> {

}

调试后,可以看到该学生正在被成功创建,并被添加到列表中。但正如可以看到的那样Student@10172,在学生列表中,将其保存在Student@10482。列表中的所有先前条目都是先前测试尝试的结果。

共有1个答案

仇炜
2023-03-14

遗憾的是,我不能发表评论,因为我没有代表,但是…如果你有学生,你把它添加到持久化对象中,你读回它,它就出现在集合中。那么唯一真正要问的问题是,你会在你的学生类中覆盖哈希代码和等于吗?

否则包含将查找相同的对象,而不是学生的相同表示。

 类似资料:
  • 我已经开始考虑在我的项目中围绕一些业务逻辑添加一些单元测试。 我想测试的第一个方法是服务层中的一个方法,它返回给定节点的子节点列表。 该方法如下所示: 我想象这样的测试方法是提供一个假树结构,然后测试提供节点是否返回正确的子节点。 ssdsContext是一个对象上下文。 我已经看到可以为提取和接口如何模拟ObjectContext或ObjectQuery 我还读到,as Entity Frame

  • 因为save是一个void方法。 有人知道如何修复这个单元测试吗?

  • 在我的项目中,我在进行单元测试时遇到了问题。一个问题是,仅仅进行联调就可以更快地编写,并且还可以测试组件是否真正协同工作。单元测试新颖的“算法”之类的似乎要容易得多。单元测试服务类感觉是错误和无用的。 我使用mockito来模拟spring数据存储库(以及DB访问)。问题是,如果我告诉模拟存储库在方法调用getById时返回实体A,它显然会返回实体A,服务也会返回实体A。是的,该服务做了一些额外的

  • 我不熟悉单元测试。参考google之后,我创建了一个测试类来测试我的控制器,如下所示: 我有以下控制器和服务类: 当我调试单元测试时,控制器中的p对象为null。我的状态是200,但不是预期的JSON响应 我错过了什么?

  • 我在Java写了一些简单的代码,该方法应该连接到网站并返回BufferedReader。 当我在我的PC上使用它时,它可以正常工作,但当我将. jar文件放在服务器上时,我会收到这个错误: 问题很奇怪,因为每次都不会抛出异常,有时一切都很好,程序工作正常。 有人有什么想法吗?

  • 本文向大家介绍AngularJS 单元测试服务,包括了AngularJS 单元测试服务的使用技巧和注意事项,需要的朋友参考一下 示例 服务编号 考试 跑!