2017-02-23 136 views
0

我有以下类,但是我的jUnit assertEquals()测试不起作用。经过几天的搜索和没有答案,我决定在这里发帖。代码中的所有内容似乎都正确,但仍然无法正常工作。JUnit测试问题:: assertEquals()

Contact类:

@Embeddable 
public class Contact { 

    @Column 
    private String name; 

    @Column 
    private String address; 

    @Column 
    private String phone; 

    public Contact(){ 
    } 

    public Contact(String name, String address, String phone) { 
     super(); 
     this.name = name; 
     this.address = address; 
     this.phone = phone; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    public String getAddress() { 
     return address; 
    } 
    public void setAddress(String address) { 
     this.address = address; 
    } 

    public String getPhone() { 
     return phone; 
    } 
    public void setPhone(String phone) { 
     this.phone = phone; 
    } 

    public String toString() { 
     return "Contact [name=" + name + ", address=" + address + ", phone=" + phone + "]"; 
    } 

    @Override 
    public boolean equals(Object o){ 
     if(this == o){ 
      return true; 
     } 
     if(o == null){ 
      return false; 
     } 
     if(this.getClass() != o.getClass()){ 
      return false; 
     } 

     Contact contact = (Contact)o; 

     if(name != contact.getName()){return false;} 
     if(address != contact.getAddress()){return false;} 
     if(phone != contact.getPhone()){return false;} 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = name != null ? name.hashCode() : 0; 
     result = 31 * result + (address != null ? address.hashCode() : 0); 
     result = 31 * result + (phone != null ? phone.hashCode() : 0); 

     return result;   
    }  
} 

Order类:

@Entity 
public class Orders { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 

    @Embedded 
    @AttributeOverrides({ 
     @AttributeOverride(name="name", [email protected](name="weekday_recipient")), 
     @AttributeOverride(name="address", [email protected](name="weekday_address")), 
     @AttributeOverride(name="phone", [email protected](name="weekday_phone")), 
    }) 
    private Contact weekdayContact; 


    @Embedded 
    @AttributeOverrides({ 
     @AttributeOverride(name="name", [email protected](name="holiday_recipient")), 
     @AttributeOverride(name="address", [email protected](name="holiday_address")), 
     @AttributeOverride(name="phone", col[email protected](name="holiday_phone")) 
    }) 
    private Contact holidayContact; 

    public Orders() { 
     super(); 
    } 

    public Long getId() { 
     return id; 
    } 

    public Contact getWeekdayContact() { 
     return weekdayContact; 
    } 
    public void setWeekdayContact(Contact weekdayContact) { 
     this.weekdayContact = weekdayContact; 
    } 

    public Contact getHolidayContact() { 
     return holidayContact; 
    } 
    public void setHolidayContact(Contact holidayContact) { 
     this.holidayContact = holidayContact; 
    } 

    public String toString() { 
     return "orders [WEEKDAY_CONTACT=" + this.getWeekdayContact().toString() + 
     ", HOLIDAY_CONTACT=" + this.getHolidayContact().toString() + "]"; 
    } 

    @Override 
    public boolean equals(Object o){ 
     // self check 
     if(this == o){ 
      return true; 
     } 
     // null check 
     if(o == null){ 
      return false; 
     } 
     //type check and cast 
     if(getClass() != o.getClass()){ 
      return false; 
     } 
     Orders orders = (Orders)o; 
     // field comparison 

     return Objects.equals(weekdayContact, orders.weekdayContact) 
       && 
       Objects.equals(holidayContact, orders.holidayContact); 


    } 

} 

测试类

public class Chapter3Test { 
    Contact weekdayContact = new Contact("Vienna", "Milkstreet 20", "+336598741"); 
    Contact holidayContact = new Contact("Cocos Island", "Gulay avenue 85", "+5589632147"); 
    Orders orders = new Orders(); 


    EntityManager em = EntitySessionManager.getEntityManager(); 


    @Before 
    public void setUp(){ 
     orders.setWeekdayContact(weekdayContact); 
     orders.setHolidayContact(holidayContact); 
     em.getTransaction().begin(); 
    } 

    @Test 
    public void createOrders() { 

     em.persist(orders); 

     em.getTransaction().commit(); 
     em.close(); 
    } 

    @Test 
    public void retrieveOrders(){ 
     em = EntitySessionManager.getEntityManager(); 
     em.getTransaction().begin(); 

     Orders myOrders = em.find(Orders.class, 2L); 

     assertEquals("They are not Equal", myOrders.getWeekdayContact(), orders.getWeekdayContact()); 
     assertEquals("They are not Equal", myOrders.getHolidayContact(), orders.getHolidayContact()); 

     em.getTransaction().commit(); 
     em.close(); 
    } 

    @After 
    public void closeResources(){ 
     //em.close(); 
    } 

} 

当我运行我的测试,我得到的结果如下::

java.lang.AssertionError: They are not Equal expected: chapter3.Contact<Contact [name=Vienna, address=Milkstreet 20, phone=+336598741]> but was: chapter3.Contact<Contact [name=Vienna, address=Milkstreet 20, phone=+336598741]> 

你可以看到预期的和返回的是一样的。

+0

事实之后,问题可以看作是我在我的答案中链接到的DUP;但是我给你提供一个非常好的完整问题,以解决问题所需的所有事情! – GhostCat

回答

3

这里:

private String name; 

但随后你的equals方法中:

if(name != contact.getName()){return false;} 

你比较== RESP字符串。 !=这里。

错误(详情请参见here)。改为使用name.equals(contact.getName())

这不是asssertEquals()这是错误的。该方法只需拨打您的执行equals()。所以当结果是意外,那么你的执行必须被打破!

而且提示:当比较什么(ESP字符串)不相信它们看起来是一样的唯一的使对象等于 ...的东西是equals()方法的结果。还有其他的什么不是算!

+0

感谢它现在的作品 –