2016-03-09 4 views
0

Новичкам в тестировании !! У меня есть некоторые проблемы с Test-Coverage по классу Customer, у которого есть связи с двумя другими классами доменов, которые приведены ниже, 1-й класс домена InsuranceClaim и класс 2-го класса автомобилей. Реальная проблема заключается в тестировании покрытия списков:Test Domain Model Junit Java

Подробнее о том, как я могу проверить hasCode и равен в моем коде? Любое предложение или исправление было бы полезно и оценено!

Спасибо Джим

public List<Car> getCars() { 
    return cars; 
} 

public void setCars(List<Car> cars) { 
    this.cars = cars; 
} 

public List<InsuranceClaim> getInsuranceClaims() { 
    return insuranceClaims; 
} 

public void setInsuranceClaims(List<InsuranceClaim> insuranceClaims) { 
    this.insuranceClaims = insuranceClaims; 
} 

Вот Клиент Домен Класс:

package models; 

import java.util.ArrayList; 
import java.util.Date; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Embedded; 
import javax.persistence.Entity; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityTransaction; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

import models.persistence.JPAUtil; 
//import play.db.jpa.JPA; 
//import play.db.jpa.Transactional; 
import play.db.jpa.Transactional; 


@Entity 
@Table(name = "customers") 
public class Customer { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @Column(name = "firstName", length = 512, nullable = false) 
    private String firstName; 

    @Column(name = "lastName", length = 512, nullable = false) 
    private String lastName; 

    @Column(name = "birthDate", nullable = false) 
    private Date birthDate; 

    @Column(name = "scale", nullable = false) 
    private int scale; 

    @Embedded 
    private Address address; 

    @Column(name = "afm", length = 9, nullable = false) 
    private String afm; 

    @Column(name = "phonenumber", length = 10, nullable = false) 
    private String phonenumber; 

    @OneToMany(orphanRemoval=true, 
      cascade = CascadeType.ALL, 
      mappedBy="customer", fetch=FetchType.LAZY)  
    private List<Car> cars = new ArrayList<Car>(); 

    @OneToMany(orphanRemoval=true, 
      cascade = CascadeType.ALL, 
      mappedBy="customer", fetch=FetchType.LAZY)  
    private List<InsuranceClaim> insuranceClaims = new ArrayList<InsuranceClaim>(); 


    public Customer() { 
    } 

    public Customer(String firstName, String lastName, Date birthDate, int scale, Address address, String afm, String phonenumber/*, List<Car> cars*/) { 
     super(); 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.birthDate = birthDate; 
     this.scale = scale; 
     this.address = address; 
     this.afm = afm; 
     this.phonenumber = phonenumber; 
     //this.cars = cars; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public Date getBirthDate() { 
     return birthDate; 
    } 

    public void setBirthDate(Date birthDate) { 
     this.birthDate = birthDate; 
    } 

    public int getScale() { 
     return scale; 
    } 

    public void setScale(int scale) { 
     this.scale = scale; 
    } 


    public Address getAddress() { 
     return address; 
    } 

    public void setAddress(Address address) { 
     this.address = address; 
    } 

    public void setAfm(String afm) { 
     this.afm = afm; 
    } 

    public String getAfm() { 
     return afm; 
    } 

    public String getPhonenumber() { 
     return phonenumber; 
    } 

    public void setPhonenumber(String phonenumber) { 
     this.phonenumber = phonenumber; 
    } 



    @Override 
    public String toString() { 
     return "Customer [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", birthDate=" + birthDate 
       + ", scale=" + scale + ", address=" + address + ", afm=" + afm + ", phonenumber=" + phonenumber + "]"; 
    } 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((address == null) ? 0 : address.hashCode()); 
     result = prime * result + ((afm == null) ? 0 : afm.hashCode()); 
     result = prime * result + ((birthDate == null) ? 0 : birthDate.hashCode()); 
     result = prime * result + ((firstName == null) ? 0 : firstName.hashCode()); 
     result = prime * result + id; 
     result = prime * result + ((lastName == null) ? 0 : lastName.hashCode()); 
     result = prime * result + ((phonenumber == null) ? 0 : phonenumber.hashCode()); 
     result = prime * result + scale; 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     Customer other = (Customer) obj; 
     if (address == null) { 
      if (other.address != null) 
       return false; 
     } else if (!address.equals(other.address)) 
      return false; 
     if (afm == null) { 
      if (other.afm != null) 
       return false; 
     } else if (!afm.equals(other.afm)) 
      return false; 
     if (birthDate == null) { 
      if (other.birthDate != null) 
       return false; 
     } else if (!birthDate.equals(other.birthDate)) 
      return false; 
     if (firstName == null) { 
      if (other.firstName != null) 
       return false; 
     } else if (!firstName.equals(other.firstName)) 
      return false; 
     if (id != other.id) 
      return false; 
     if (lastName == null) { 
      if (other.lastName != null) 
       return false; 
     } else if (!lastName.equals(other.lastName)) 
      return false; 
     if (phonenumber == null) { 
      if (other.phonenumber != null) 
       return false; 
     } else if (!phonenumber.equals(other.phonenumber)) 
      return false; 
     if (scale != other.scale) 
      return false; 
     return true; 
    } 



    public List<Car> getCars() { 
     return cars; 
    } 

    public void setCars(List<Car> cars) { 
     this.cars = cars; 
    } 

    public List<InsuranceClaim> getInsuranceClaims() { 
     return insuranceClaims; 
    } 

    public void setInsuranceClaims(List<InsuranceClaim> insuranceClaims) { 
     this.insuranceClaims = insuranceClaims; 
    } 

    public void saveNewCustomer() { 
     EntityManager em = JPAUtil.getCurrentEntityManager(); 
      EntityTransaction et = em.getTransaction(); 
      et.begin(); 
      em.persist(this); 
      et.commit(); 
      em.close(); 
     } 

} 

Вот другой класс домена, что я см:

package models; 

import java.util.Date; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityTransaction; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 

import models.persistence.JPAUtil; 


@Entity 
@Table(name = "insuranceClaims") 
public class InsuranceClaim { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @Column(name = "approval") 
    private Boolean approval; 

    @Column(name = "date") 
    private Date date; 

    @Column(name = "damage") 
    private String damage; 

    @Column(name = "amount") 
    private Double amount; 

    @ManyToOne(fetch=FetchType.LAZY, 
      cascade = { CascadeType.PERSIST, CascadeType.MERGE }) 
    @JoinColumn(name="customerid") 
    private Customer customer; 

    @ManyToOne(fetch=FetchType.LAZY, 
      cascade = { CascadeType.PERSIST, CascadeType.MERGE }) 
    @JoinColumn(name="contractid") 
    private Contract contract; 


    public InsuranceClaim() { 
    } 


    public InsuranceClaim(InsuranceClaim insuranceClaim) { 
     this.approval = insuranceClaim.getApproval(); 
     this.date = insuranceClaim.getDate(); 
    } 


    public InsuranceClaim(Boolean approval, Date date, String damage, Double amount) { 
     super(); 
     this.approval = approval; 
     this.date = date; 
     this.damage = damage; 
     this.amount = amount; 
    } 


    public int getId() { 
     return id; 
    } 



    public Double getAmount() { 
     return amount; 
    } 


    public void setAmount(Double amount) { 
     this.amount = amount; 
    } 


    public void setId(int id) { 
     this.id = id; 
    } 



    public Boolean getApproval() { 
     return approval; 
    } 


    public void setApproval(Boolean approval) { 
     this.approval = approval; 
    } 


    public Date getDate() { 
     return date; 
    } 


    public void setDate(Date date) { 
     this.date = date; 
    } 

    public String getDamage() { 
     return damage; 
    } 


    public void setDamage(String damage) { 
     this.damage = damage; 
    } 

    protected void setCustomer(Customer customer) { 
     if (this.customer != null) { 
      this.customer.getInsuranceClaims().remove(this); 
     } 
     this.customer = customer; 
     if (customer != null) { 
      this.customer.getInsuranceClaims().add(this); 
     } 
    } 

    public Customer getCustomer() { 
     return customer; 
    } 


    protected void setContract(Contract contract) { 
     this.contract = contract; 
    } 

    public Contract getContract() { 
     return contract; 
    } 


    public void saveNewInsuranceClaim() { 
     EntityManager em = JPAUtil.getCurrentEntityManager(); 
      EntityTransaction et = em.getTransaction(); 
      et.begin(); 
      em.persist(this); 
      //et.commit(); 
      em.close(); 
     } 
} 

Здесь является третьим классом домена:

package models; 

import java.util.Date; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityTransaction; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToOne; 
//import javax.persistence.OneToOne; 
import javax.persistence.Table; 

import models.persistence.JPAUtil; 


@Entity 
@Table(name = "cars") 
public class Car { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @Column(name = "model") 
    private String model; 

    @Column(name = "color") 
    private String color; 

    @Column(name = "licenseDateIssued") 
    private Date licenseDateIssued; 

    @Column(name = "plate") 
    private String plate; 

    //EXEI PROVLHMA 
    //@OneToOne 
    //@JoinColumn(name="contractid") 
    @OneToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="contractid") 
    private Contract contract; 

    @ManyToOne(fetch=FetchType.LAZY, 
      cascade = { CascadeType.PERSIST, CascadeType.MERGE }) 
    @JoinColumn(name="customerid") 
    private Customer customer; 

    public Car() { 
    } 



    public int getId() { 
     return id; 
    } 



    public void setId(int id) { 
     this.id = id; 
    } 



    public String getModel() { 
     return model; 
    } 



    public void setModel(String model) { 
     this.model = model; 
    } 



    public String getColor() { 
     return color; 
    } 



    public void setColor(String color) { 
     this.color = color; 
    } 



    public Date getLicenseDateIssued() { 
     return licenseDateIssued; 
    } 



    public void setLicenseDateIssued(Date licenseDateIssued) { 
     this.licenseDateIssued = licenseDateIssued; 
    } 



    public String getPlate() { 
     return plate; 
    } 



    public void setPlate(String plate) { 
     this.plate = plate; 
    } 



    public Contract getContract() { 
     return contract; 
    } 



    public void setContract(Contract contract) { 
     this.contract = contract; 
    } 



    public Customer getCustomer() { 
     return customer; 
    } 



    public void setCustomer(Customer customer) { 
     this.customer = customer; 
    } 



    public Car(Car car) { 
     this.model = car.getModel(); 
     this.color = car.getColor(); 
     this.licenseDateIssued = car.getLicenseDateIssued(); 
     this.plate = car.getPlate(); 
    } 

    public Car(String model, String color, Date licenseDateIssued, String plate) { 
     super(); 
     this.model = model; 
     this.color = color; 
     this.licenseDateIssued = licenseDateIssued; 
     this.plate = plate; 
    } 


    public void saveNewCar() { 
     EntityManager em = JPAUtil.getCurrentEntityManager(); 
      EntityTransaction et = em.getTransaction(); 
      et.begin(); 
      em.persist(this); 
      et.commit(); 
      em.close(); 
     } 

} 

Вот тест для класса домена клиента:

package models; 


import java.lang.reflect.Constructor; 
import java.lang.reflect.Modifier; 
import java.util.Date; 
import java.util.List; 
import java.util.Set; 

import javax.persistence.Column; 
import javax.persistence.Embedded; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

import models.Customer; 
import models.InsuranceClaim; 

import org.junit.Assert; 
import org.junit.Before; 
import org.junit.Test; 


public class CustomerTest { 


    Customer customer; 
    InsuranceClaim insuranceClaim; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @Column(name = "firstName", length = 512, nullable = false) 
    private String firstName; 

    @Column(name = "lastName", length = 512, nullable = false) 
    private String lastName; 

    @Column(name = "birthDate", nullable = false) 
    private Date birthDate; 

    @Column(name = "scale", nullable = false) 
    private int scale; 

    @Embedded 
    private Address address; 

    @Column(name = "afm", length = 10, nullable = false) 
    private String afm; 

    @Column(name = "phonenumber", length = 10, nullable = false) 
    private String phonenumber; 

    @Before 
    public void setUp() { 
     customer = new Customer("SomeName", "LastName", new Date(1997-4-26), 0, new Address("SomeStreet", "Number", "Location", "PostalCode", "Country"), "someString", "someString"); 
     insuranceClaim = new InsuranceClaim(true,new Date(2016-03-04),"Damage Inc",400.00); 
     //insuranceClaim.setDamage("Damage Inc"); 
     //insuranceClaim.setDate(new Date(2016-03-04)); 
     //insuranceClaim.setContract(new Contract(0.0d, new Date(2016-07-03),new Date(2018-07-03))); 
    } 

    @Test 
    public void succefulSetUp() { 
     claimBidirectionalAssociationInvariant(customer); 
     carBidirectionalAssociationInvariant(customer); 
     //expectedItemsSize(customer,1); 
     //Assert.assertEquals(ItemState.AVAILABLE, item.getState()); 
     //successfullAdditionofclaim(customer,insuranceClaim); 
    } 

    @Test 
    public void testConstructor() { 
     final Constructor<?>[] constructors = Customer.class.getDeclaredConstructors(); 
     for (Constructor<?> constructor : constructors) { 
      Assert.assertTrue(Modifier.isPublic(constructor.getModifiers())); 
     } 
    } 

    @Test 
    public void testGetterSetterPostalCode() { 
     final String postalCode = "456098"; 
     final Address address = new Address(); 
     address.setZipCode("456098"); 
     Assert.assertEquals(address.getZipCode(),postalCode); 
    } 

    @Test 
    public void testGetterSetterFirstName() { 
     final String customer = "Koula"; 
     final Customer customerName = new Customer(); 
     customerName.setFirstName("Koula"); 
     Assert.assertEquals(customerName.getFirstName(),customer); 
    } 

    @Test 
    public void testGetterSetterLastName() { 
     final String customer = "Pepona"; 
     final Customer customerName = new Customer(); 
     customerName.setLastName("Pepona"); 
     Assert.assertEquals(customerName.getLastName(),customer); 
    } 

    @Test 
    public void testGetterSetterScale() { 
     final int customerScale = 5; 
     final Customer customerName = new Customer(); 
     customerName.setScale(5); 
     Assert.assertEquals(customerName.getScale(),customerScale); 
    } 

    @Test 
    public void testGetterSetterBirthdate() { 
     Date birth= new Date(1991-8-27); 
     final Customer customerBirth = new Customer(); 
     customerBirth.setBirthDate(new Date(1991-8-27)); 
     Assert.assertEquals(customerBirth.getBirthDate(),birth); 
    } 

    @Test 
    public void testGetterSetterAfm() { 
     final String Afm = "12345678"; 
     final Customer customerAfm = new Customer(); 
     customerAfm.setAfm("12345678"); 
     Assert.assertEquals(customerAfm.getAfm(),Afm); 
    } 

    @Test 
    public void testGetterSetterID() { 
     final int id = 12345678; 
     final Customer customerID = new Customer(); 
     customerID.setId(12345678); 
     Assert.assertEquals(customerID.getId(),id); 
    } 

    @Test 
    public void testGetterSetterAddress() { 
     Address address = new Address(new Address("someName", "numberStreet", "location", "postalCode", "Country")); 
     final Customer customerAddress = new Customer(); 
     customerAddress.setAddress(new Address("someName", "numberStreet", "location", "postalCode", "Country")); 
     Assert.assertEquals(customerAddress.getAddress(),address); 
    } 
    @Test 
    public void testGetterSetterPhonenumber() { 
     final String customerPhone = "2103948576"; 
     final Customer phone = new Customer(); 
     phone.setPhonenumber("2103948576"); 
     Assert.assertEquals(phone.getPhonenumber(),customerPhone); 
    } 
    @Test 
    public void toStringTest(){ 

     String name = "Customer [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", birthDate=" + birthDate 
       + ", scale=" + scale + ", address=" + address + ", afm=" + afm + ", phonenumber=" + phonenumber + "]"; 

     String toString = name.toString(); 

     Assert.assertTrue((boolean)toString.contains("Customer [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", birthDate=" + birthDate 
       + ", scale=" + scale + ", address=" + address + ", afm=" + afm + ", phonenumber=" + phonenumber + "]")); 

    } 



    @SuppressWarnings("unchecked") 
    private void carBidirectionalAssociationInvariant(Customer customer) { 
     for(Car car : customer.getCars()) { 

      //((List<Car>) customer).add(new Car("suzuki swift", "red", new Date(2014-11-12), "DTP12346")); 
      Assert.assertSame(car.getCustomer(),customer.getCars()); 
     } 
    } 


    private void claimBidirectionalAssociationInvariant(Customer customer) { 
     for(InsuranceClaim claim : customer.getInsuranceClaims()) { 
      claim.setAmount(50.00); 

      Assert.assertSame(claim.getAmount(), 50.00); 

      //Assert.assertTrue(InsuranceClaim.setDmage("Damage Inc").contains(customer)); 
     } 
    } 


} 

ответ

1

Чтобы проверить getHashCode и equals просто создавать объекты, которые вы ожидаете, чтобы быть равными и объекты, которые вы ожидаете, чтобы не быть и убедитесь, что, когда они, как ожидается, чтобы быть равным, тогда equals возвращает true, а хеш-коды являются одинаковыми, а когда ожидается, что они будут отличаться, то equals возвращает false, а хэш-коды разные.