33import org .junit .Test ;
44
55import java .lang .reflect .Field ;
6+ import java .lang .reflect .Modifier ;
67import java .util .ArrayList ;
78import java .util .Arrays ;
89import java .util .Collections ;
910import java .util .List ;
11+ import java .util .stream .Collectors ;
12+ import java .util .stream .Stream ;
1013
1114import static org .junit .Assert .*;
1215
@@ -26,43 +29,46 @@ public void givenPersonClass_whenGetDeclaredFields_thenTwoFields() {
2629 // Then
2730 assertEquals (2 , allFields .length );
2831
29- Field lastNameField = allFields [0 ];
30- assertEquals (LAST_NAME_FIELD , lastNameField .getName ());
31- assertEquals (String .class , lastNameField .getType ());
32-
33- Field firstNameField = allFields [1 ];
34- assertEquals (FIRST_NAME_FIELD , firstNameField .getName ());
35- assertEquals (String .class , firstNameField .getType ());
32+ assertTrue (Arrays .stream (allFields ).anyMatch (field ->
33+ field .getName ().equals (LAST_NAME_FIELD )
34+ && field .getType ().equals (String .class ))
35+ );
36+ assertTrue (Arrays .stream (allFields ).anyMatch (field ->
37+ field .getName ().equals (FIRST_NAME_FIELD )
38+ && field .getType ().equals (String .class ))
39+ );
3640 }
3741
3842 @ Test
39- public void givenEmployeeClass_whenSuperClassGetDeclaredFields_thenOneField () {
43+ public void givenEmployeeClass_whenGetDeclaredFields_thenOneField () {
4044 // When
41- Field [] allFields = Employee .class .getSuperclass (). getDeclaredFields ();
45+ Field [] allFields = Employee .class .getDeclaredFields ();
4246
4347 // Then
44- assertEquals (2 , allFields .length );
45-
46- Field lastNameField = allFields [0 ];
47- assertEquals (LAST_NAME_FIELD , lastNameField .getName ());
48- assertEquals (String .class , lastNameField .getType ());
48+ assertEquals (1 , allFields .length );
4949
50- Field firstNameField = allFields [1 ];
51- assertEquals (FIRST_NAME_FIELD , firstNameField .getName ());
52- assertEquals (String .class , firstNameField .getType ());
50+ assertTrue (Arrays .stream (allFields ).anyMatch (field ->
51+ field .getName ().equals (EMPLOYEE_ID_FIELD )
52+ && field .getType ().equals (int .class ))
53+ );
5354 }
5455
5556 @ Test
56- public void givenEmployeeClass_whenGetDeclaredFields_thenOneField () {
57+ public void givenEmployeeClass_whenSuperClassGetDeclaredFields_thenOneField () {
5758 // When
58- Field [] allFields = Employee .class .getDeclaredFields ();
59+ Field [] allFields = Employee .class .getSuperclass (). getDeclaredFields ();
5960
6061 // Then
61- assertEquals (1 , allFields .length );
62+ assertEquals (2 , allFields .length );
6263
63- Field employeeIdField = allFields [0 ];
64- assertEquals (EMPLOYEE_ID_FIELD , employeeIdField .getName ());
65- assertEquals (int .class , employeeIdField .getType ());
64+ assertTrue (Arrays .stream (allFields ).anyMatch (field ->
65+ field .getName ().equals (LAST_NAME_FIELD )
66+ && field .getType ().equals (String .class ))
67+ );
68+ assertTrue (Arrays .stream (allFields ).anyMatch (field ->
69+ field .getName ().equals (FIRST_NAME_FIELD )
70+ && field .getType ().equals (String .class ))
71+ );
6672 }
6773
6874 @ Test
@@ -76,52 +82,68 @@ public void givenEmployeeClass_whenGetDeclaredFieldsOnBothClasses_thenThreeField
7682 // Then
7783 assertEquals (3 , allFields .length );
7884
79- Field lastNameField = allFields [0 ];
80- assertEquals (LAST_NAME_FIELD , lastNameField .getName ());
81- assertEquals (String .class , lastNameField .getType ());
82-
83- Field firstNameField = allFields [1 ];
84- assertEquals (FIRST_NAME_FIELD , firstNameField .getName ());
85- assertEquals (String .class , firstNameField .getType ());
86-
87- Field employeeIdField = allFields [2 ];
88- assertEquals (EMPLOYEE_ID_FIELD , employeeIdField .getName ());
89- assertEquals (int .class , employeeIdField .getType ());
85+ assertTrue (Arrays .stream (allFields ).anyMatch (field ->
86+ field .getName ().equals (LAST_NAME_FIELD )
87+ && field .getType ().equals (String .class ))
88+ );
89+ assertTrue (Arrays .stream (allFields ).anyMatch (field ->
90+ field .getName ().equals (FIRST_NAME_FIELD )
91+ && field .getType ().equals (String .class ))
92+ );
93+ assertTrue (Arrays .stream (allFields ).anyMatch (field ->
94+ field .getName ().equals (EMPLOYEE_ID_FIELD )
95+ && field .getType ().equals (int .class ))
96+ );
9097 }
9198
9299 @ Test
93- public void givenMonthEmployeeClass_whenGetAllFields_thenFourFields () {
100+ public void givenEmployeeClass_whenGetDeclaredFieldsOnEmployeeSuperclassWithModifiersFilter_thenOneFields () {
94101 // When
95- List <Field > allFields = getAllFields (MonthEmployee .class );
102+ List <Field > personFields = Arrays .stream (Employee .class .getSuperclass ().getDeclaredFields ())
103+ .filter (f -> Modifier .isPublic (f .getModifiers ()) || Modifier .isProtected (f .getModifiers ()))
104+ .collect (Collectors .toList ());
96105
97106 // Then
98- assertEquals (4 , allFields .size ());
99-
100- Field lastNameField = allFields .get (0 );
101- assertEquals (LAST_NAME_FIELD , lastNameField .getName ());
102- assertEquals (String .class , lastNameField .getType ());
107+ assertEquals (1 , personFields .size ());
103108
104- Field firstNameField = allFields .get (1 );
105- assertEquals (FIRST_NAME_FIELD , firstNameField .getName ());
106- assertEquals (String .class , firstNameField .getType ());
109+ assertTrue (personFields .stream ().anyMatch (field ->
110+ field .getName ().equals (LAST_NAME_FIELD )
111+ && field .getType ().equals (String .class ))
112+ );
113+ }
107114
108- Field employeeIdField = allFields .get (2 );
109- assertEquals (EMPLOYEE_ID_FIELD , employeeIdField .getName ());
110- assertEquals (int .class , employeeIdField .getType ());
115+ @ Test
116+ public void givenMonthEmployeeClass_whenGetAllFields_thenThreeFields () {
117+ // When
118+ List <Field > allFields = getAllFields (MonthEmployee .class );
111119
112- Field monthEmployeeRewardField = allFields .get (3 );
113- assertEquals (MONTH_EMPLOYEE_REWARD_FIELD , monthEmployeeRewardField .getName ());
114- assertEquals (double .class , monthEmployeeRewardField .getType ());
120+ // Then
121+ assertEquals (3 , allFields .size ());
122+
123+ assertTrue (allFields .stream ().anyMatch (field ->
124+ field .getName ().equals (LAST_NAME_FIELD )
125+ && field .getType ().equals (String .class ))
126+ );
127+ assertTrue (allFields .stream ().anyMatch (field ->
128+ field .getName ().equals (EMPLOYEE_ID_FIELD )
129+ && field .getType ().equals (int .class ))
130+ );
131+ assertTrue (allFields .stream ().anyMatch (field ->
132+ field .getName ().equals (MONTH_EMPLOYEE_REWARD_FIELD )
133+ && field .getType ().equals (double .class ))
134+ );
115135 }
116136
117137 public List <Field > getAllFields (Class clazz ) {
118138 if (clazz == null ) {
119139 return Collections .emptyList ();
120140 }
121141
122- List <Field > result = new ArrayList <>();
123- result .addAll (getAllFields (clazz .getSuperclass ()));
124- result .addAll (Arrays .asList (clazz .getDeclaredFields ()));
142+ List <Field > result = new ArrayList <>(getAllFields (clazz .getSuperclass ()));
143+ List <Field > filteredFields = Arrays .stream (clazz .getDeclaredFields ())
144+ .filter (f -> Modifier .isPublic (f .getModifiers ()) || Modifier .isProtected (f .getModifiers ()))
145+ .collect (Collectors .toList ());
146+ result .addAll (filteredFields );
125147 return result ;
126148 }
127149
0 commit comments