2017-02-23 71 views
0

У меня есть следующие классы, но мое тестирование jUnit assertEquals() не работает. После нескольких дней поиска и ответа я решил опубликовать здесь. Все в коде кажется правильным, но оно все еще не работает.Проблемы с JUnit Testing :: assertEquals()

Контакт Класс:

@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", [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;} 

Вы сравнения строк с == соответственно. ! = здесь.

Неправильно (см. here). Используйте вместо этого name.equals(contact.getName())!

Это не asssertEquals() это не так. Этот метод просто вызывает реализация equals(). Поэтому, когда результат неожиданно, то ваш реализация должна быть сломана!

И подсказка: когда сравнения ничего (. ЭСП строк) не верю, что они выглядят одинаково. один и только вещь, которая делает объекты равна ... является результатом метода equals(). Все остальное не кол-во!

+0

спасибо, что работает сейчас –