2222import static org .assertj .core .api .Assertions .assertThatCode ;
2323import static org .assertj .core .api .Assertions .assertThatExceptionOfType ;
2424import static org .mockito .ArgumentMatchers .any ;
25+ import static org .mockito .Mockito .doReturn ;
2526import static org .mockito .Mockito .doThrow ;
2627import static org .mockito .Mockito .mock ;
2728import static org .mockito .Mockito .when ;
@@ -99,10 +100,55 @@ void omittingDuplicateFields() {
99100 @ DisplayName ("when setting a field via reflection" )
100101 class SetField {
101102
103+ private String stringField ;
104+ private int primitiveField ;
105+
106+ @ DisplayName ("an Object field can be set" )
107+ @ Test
108+ void setObject () throws Exception {
109+ var field = this .getClass ().getDeclaredField ("stringField" );
110+ var sut = new Reflector <>(this , new SpecimenType <>(){});
111+ sut .setField (field , "new value" );
112+
113+ assertThat (stringField ).isEqualTo ("new value" );
114+ }
115+
116+ @ DisplayName ("an Object field can be set to null" )
117+ @ Test
118+ void setObjectToNull () throws Exception {
119+ stringField = "before" ;
120+ var field = this .getClass ().getDeclaredField ("stringField" );
121+ var sut = new Reflector <>(this , new SpecimenType <>(){});
122+ sut .setField (field , null );
123+
124+ assertThat (stringField ).isNull ();
125+ }
126+
127+ @ DisplayName ("a primitive field can be set" )
128+ @ Test
129+ void setPrimitiveField () throws Exception {
130+ var field = this .getClass ().getDeclaredField ("primitiveField" );
131+ var sut = new Reflector <>(this , new SpecimenType <>(){});
132+ sut .setField (field , 4 );
133+
134+ assertThat (primitiveField ).isEqualTo (4 );
135+ }
136+
137+ @ DisplayName ("setting a primitive field to null keeps the default value" )
138+ @ Test
139+ void setPrimitiveFieldToNull () throws Exception {
140+ var field = this .getClass ().getDeclaredField ("primitiveField" );
141+ var sut = new Reflector <>(this , new SpecimenType <>(){});
142+ sut .setField (field , null );
143+
144+ assertThat (primitiveField ).isEqualTo (0 );
145+ }
146+
102147 @ DisplayName ("an IllegalAccessException is turned into a SpecimenException" )
103148 @ Test
104149 void catchIllegalAccessException () throws Exception {
105150 var mockedField = Mockito .mock (Field .class );
151+ doReturn (this .getClass ()).when (mockedField ).getType ();
106152 var sut = new Reflector <>("" , new SpecimenType <>(){});
107153 doThrow (new IllegalAccessException ("expected" )).when (mockedField ).set (any (), any ());
108154
@@ -114,6 +160,7 @@ void catchIllegalAccessException() throws Exception {
114160 @ Test
115161 void catchSecurityException () {
116162 var mockedField = Mockito .mock (Field .class );
163+ doReturn (this .getClass ()).when (mockedField ).getType ();
117164 var sut = new Reflector <>("" , new SpecimenType <>(){});
118165 doThrow (new SecurityException ("expected" )).when (mockedField ).setAccessible (true );
119166 assertThatExceptionOfType (SpecimenException .class )
@@ -124,6 +171,7 @@ void catchSecurityException() {
124171 @ Test
125172 void catchInaccessibleObjectException () {
126173 var mockedField = Mockito .mock (Field .class );
174+ doReturn (this .getClass ()).when (mockedField ).getType ();
127175 var sut = new Reflector <>("" , new SpecimenType <>(){});
128176 doThrow (new InaccessibleObjectException ("expected" )).when (mockedField ).setAccessible (true );
129177 assertThatExceptionOfType (SpecimenException .class )
0 commit comments