Skip to content

Commit 1b97410

Browse files
committed
BAEL-5134: an example of constructor chaining, added unit tests
1 parent ca8bead commit 1b97410

4 files changed

Lines changed: 145 additions & 0 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.baeldung.constructorchaining;
2+
3+
import java.util.Objects;
4+
5+
public class Customer extends Person {
6+
private final String loyaltyCardId;
7+
8+
public Customer(String firstName, String lastName, int age, String loyaltyCardId) {
9+
this(firstName, null, lastName, age, loyaltyCardId);
10+
}
11+
12+
public Customer(String firstName, String middleName, String lastName, int age, String loyaltyCardId) {
13+
super(firstName, middleName, lastName, age);
14+
this.loyaltyCardId = loyaltyCardId;
15+
}
16+
17+
public String getLoyaltyCardId() {
18+
return loyaltyCardId;
19+
}
20+
21+
@Override
22+
public boolean equals(Object o) {
23+
if (this == o) return true;
24+
if (o == null || getClass() != o.getClass()) return false;
25+
if (!super.equals(o)) return false;
26+
Customer customer = (Customer) o;
27+
return Objects.equals(loyaltyCardId, customer.loyaltyCardId);
28+
}
29+
30+
@Override
31+
public int hashCode() {
32+
return Objects.hash(super.hashCode(), loyaltyCardId);
33+
}
34+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.baeldung.constructorchaining;
2+
3+
import java.util.Objects;
4+
5+
public class Person {
6+
private final String firstName;
7+
private final String middleName;
8+
private final String lastName;
9+
private final int age;
10+
11+
public Person(String firstName, String lastName, int age) {
12+
this(firstName, null, lastName, age);
13+
}
14+
15+
16+
public Person(String firstName, String middleName, String lastName, int age) {
17+
this.firstName = firstName;
18+
this.middleName = middleName;
19+
this.lastName = lastName;
20+
this.age = age;
21+
}
22+
23+
public String getFirstName() {
24+
return firstName;
25+
}
26+
27+
public String getLastName() {
28+
return lastName;
29+
}
30+
31+
public int getAge() {
32+
return age;
33+
}
34+
35+
public String getMiddleName() {
36+
return middleName;
37+
}
38+
39+
@Override
40+
public boolean equals(Object o) {
41+
if (this == o) return true;
42+
if (o == null || getClass() != o.getClass()) return false;
43+
Person person = (Person) o;
44+
return age == person.age && Objects.equals(firstName, person.firstName) && Objects.equals(middleName, person.middleName) && Objects.equals(lastName, person.lastName);
45+
}
46+
47+
@Override
48+
public int hashCode() {
49+
return Objects.hash(firstName, middleName, lastName, age);
50+
}
51+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.baeldung.constructorchaining;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.assertEquals;
6+
import static org.junit.jupiter.api.Assertions.assertNull;
7+
8+
public class CustomerUnitTest {
9+
10+
@Test
11+
public void givenNameLastNameAndAge_whenUsingDedicatedConstructor_shouldInitializeFieldsAndNullifyMiddleName() {
12+
Customer mark = new Customer("Mark", "Johnson", 23, "abcd1234");
13+
14+
assertEquals(23, mark.getAge());
15+
assertEquals("Mark", mark.getFirstName());
16+
assertEquals("Johnson", mark.getLastName());
17+
assertEquals("abcd1234", mark.getLoyaltyCardId());
18+
assertNull(mark.getMiddleName());
19+
}
20+
21+
@Test
22+
public void givenAllFieldsRequired_whenUsingDedicatedConstructor_shouldInitializeAllFields() {
23+
Customer mark = new Customer("Mark", "Andrew", "Johnson", 23, "abcd1234");
24+
25+
assertEquals(23, mark.getAge());
26+
assertEquals("Mark", mark.getFirstName());
27+
assertEquals("Andrew", mark.getMiddleName());
28+
assertEquals("Johnson", mark.getLastName());
29+
assertEquals("abcd1234", mark.getLoyaltyCardId());
30+
}
31+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.baeldung.constructorchaining;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.assertEquals;
6+
import static org.junit.jupiter.api.Assertions.assertNull;
7+
8+
public class PersonUnitTest {
9+
10+
@Test
11+
public void givenNameLastNameAndAge_whenUsingDedicatedConstructor_shouldInitializeFieldsAndNullifyMiddleName() {
12+
Person mark = new Person("Mark", "Johnson", 23);
13+
14+
assertEquals(23, mark.getAge());
15+
assertEquals("Mark", mark.getFirstName());
16+
assertEquals("Johnson", mark.getLastName());
17+
assertNull(mark.getMiddleName());
18+
}
19+
20+
@Test
21+
public void givenAllFieldsRequired_whenUsingDedicatedConstructor_shouldInitializeAllFields() {
22+
Person mark = new Person("Mark", "Andrew", "Johnson", 23);
23+
24+
assertEquals(23, mark.getAge());
25+
assertEquals("Mark", mark.getFirstName());
26+
assertEquals("Andrew", mark.getMiddleName());
27+
assertEquals("Johnson", mark.getLastName());
28+
}
29+
}

0 commit comments

Comments
 (0)