猿问

春季启动应用程序oneToMany关系中的assertTrue异常

我有一个带有cooperator和student模型(等等)的弹簧启动应用程序。他们有来自合作者方面的@oneToMany 关系和来自学生方面的@ManyToOne


合作者等级:


@Entity

public class Cooperator{

    private Integer id;


    public void setId(Integer value) {

        this.id = value;

    }

    @Id

    public Integer getId() {

        return this.id;

    }

    private Set<Student> student;


    @OneToMany(mappedBy="cooperator", cascade={CascadeType.ALL})

    public Set<Student> getStudent() {

       return this.student;

    }


    public void setStudent(Set<Student> students) {

       this.student = students;

    }


    public void addStudent(Student student) {

        try {

            this.student.add(student);

        }

        catch(Exception e) {    

            this.student = new HashSet<Student>();

            this.student.add(student);

        }

    }

}

学生班级:


@Entity

public class Student{

    private String studentID;


    public void setStudentID(String value) {

       this.studentID = value;

    }

    @Id

    public String getStudentID() {

        return this.studentID;

    }


    private Cooperator cooperator;


    @ManyToOne(optional=false)

    public Cooperator getCooperator() {

       return this.cooperator;

    }


    public void setCooperator(Cooperator cooperator) {

       this.cooperator = cooperator;

    }

}

我正在通过以下方式测试关系:


    @Test

    public void cooperatorStudent() {

        String studentID = "260632353";

        String firstname = "Saleh";

        String lastname = "Bakhit";

        Student student1 = service.createStudent(studentID, firstname, lastname, cooperator);

        assertEquals(cooperator, student1.getCooperator());


    }

问题是 assertTrue 语句失败,即使cooperatorStudents实际上包含两个student对象。


非常感谢任何关于为什么会这样的帮助。


MMTTMM
浏览 106回答 2
2回答

明月笑刀无情

就我没有忽略任何事情而言,您不会在 test-method 中将学生对象添加到合作者中。在您的测试方法中调用该addStudent()方法应该可以解决问题。@Testpublic void cooperatorStudent() {&nbsp; &nbsp; String studentID = "260632353";&nbsp; &nbsp; String firstname = "Saleh";&nbsp; &nbsp; String lastname = "Bakhit";&nbsp; &nbsp; Student student1 = service.createStudent(studentID, firstname, lastname, cooperator);&nbsp; &nbsp; assertEquals(cooperator, student1.getCooperator());&nbsp; &nbsp; studentID = "260632350";&nbsp; &nbsp; firstname = "testFirst";&nbsp; &nbsp; lastname = "testLast";&nbsp; &nbsp; Student student2 = service.createStudent(studentID, firstname, lastname, cooperator);&nbsp; &nbsp; assertEquals(cooperator, student2.getCooperator());&nbsp; &nbsp; cooperator.addStudent(student1);&nbsp; &nbsp; cooperator.addStudent(student2);&nbsp; &nbsp; Set<Student> cooperatorStudents = cooperator.getStudent();&nbsp; &nbsp; assertTrue(cooperatorStudents.contains(student1));&nbsp; &nbsp; assertTrue(cooperatorStudents.contains(student2));}

互换的青春

然后你想要比较对象,你必须覆盖“equals”和“hashcode”方法。默认情况下,每个类实例“对象”都是唯一的,尽管它们的字段相同。很好的解释:https ://dzone.com/articles/working-with-hashcode-and-equals-in-java
随时随地看视频慕课网APP

相关分类

Java
我要回答