Новичкам в тестировании !! У меня есть некоторые проблемы с 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));
}
}
}