BAEL-5134: an example of constructor chaining, added unit tests
This commit is contained in:
parent
453ca3ea3b
commit
000ae20d5d
|
@ -0,0 +1,34 @@
|
||||||
|
package com.baeldung.constructorchaining;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class Customer extends Person {
|
||||||
|
private final String loyaltyCardId;
|
||||||
|
|
||||||
|
public Customer(String firstName, String lastName, int age, String loyaltyCardId) {
|
||||||
|
this(firstName, null, lastName, age, loyaltyCardId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Customer(String firstName, String middleName, String lastName, int age, String loyaltyCardId) {
|
||||||
|
super(firstName, middleName, lastName, age);
|
||||||
|
this.loyaltyCardId = loyaltyCardId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLoyaltyCardId() {
|
||||||
|
return loyaltyCardId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
if (!super.equals(o)) return false;
|
||||||
|
Customer customer = (Customer) o;
|
||||||
|
return Objects.equals(loyaltyCardId, customer.loyaltyCardId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(super.hashCode(), loyaltyCardId);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
package com.baeldung.constructorchaining;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class Person {
|
||||||
|
private final String firstName;
|
||||||
|
private final String middleName;
|
||||||
|
private final String lastName;
|
||||||
|
private final int age;
|
||||||
|
|
||||||
|
public Person(String firstName, String lastName, int age) {
|
||||||
|
this(firstName, null, lastName, age);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Person(String firstName, String middleName, String lastName, int age) {
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.middleName = middleName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
this.age = age;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFirstName() {
|
||||||
|
return firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastName() {
|
||||||
|
return lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAge() {
|
||||||
|
return age;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMiddleName() {
|
||||||
|
return middleName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
Person person = (Person) o;
|
||||||
|
return age == person.age && Objects.equals(firstName, person.firstName) && Objects.equals(middleName, person.middleName) && Objects.equals(lastName, person.lastName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(firstName, middleName, lastName, age);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.baeldung.constructorchaining;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
|
||||||
|
public class CustomerUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNameLastNameAndAge_whenUsingDedicatedConstructor_shouldInitializeFieldsAndNullifyMiddleName() {
|
||||||
|
Customer mark = new Customer("Mark", "Johnson", 23, "abcd1234");
|
||||||
|
|
||||||
|
assertEquals(23, mark.getAge());
|
||||||
|
assertEquals("Mark", mark.getFirstName());
|
||||||
|
assertEquals("Johnson", mark.getLastName());
|
||||||
|
assertEquals("abcd1234", mark.getLoyaltyCardId());
|
||||||
|
assertNull(mark.getMiddleName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAllFieldsRequired_whenUsingDedicatedConstructor_shouldInitializeAllFields() {
|
||||||
|
Customer mark = new Customer("Mark", "Andrew", "Johnson", 23, "abcd1234");
|
||||||
|
|
||||||
|
assertEquals(23, mark.getAge());
|
||||||
|
assertEquals("Mark", mark.getFirstName());
|
||||||
|
assertEquals("Andrew", mark.getMiddleName());
|
||||||
|
assertEquals("Johnson", mark.getLastName());
|
||||||
|
assertEquals("abcd1234", mark.getLoyaltyCardId());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.baeldung.constructorchaining;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
|
||||||
|
public class PersonUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNameLastNameAndAge_whenUsingDedicatedConstructor_shouldInitializeFieldsAndNullifyMiddleName() {
|
||||||
|
Person mark = new Person("Mark", "Johnson", 23);
|
||||||
|
|
||||||
|
assertEquals(23, mark.getAge());
|
||||||
|
assertEquals("Mark", mark.getFirstName());
|
||||||
|
assertEquals("Johnson", mark.getLastName());
|
||||||
|
assertNull(mark.getMiddleName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAllFieldsRequired_whenUsingDedicatedConstructor_shouldInitializeAllFields() {
|
||||||
|
Person mark = new Person("Mark", "Andrew", "Johnson", 23);
|
||||||
|
|
||||||
|
assertEquals(23, mark.getAge());
|
||||||
|
assertEquals("Mark", mark.getFirstName());
|
||||||
|
assertEquals("Andrew", mark.getMiddleName());
|
||||||
|
assertEquals("Johnson", mark.getLastName());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue