File tree 2 files changed +75
-0
lines changed
main/java/com/baeldung/autovalue
test/java/com/baeldung/autovalue 2 files changed +75
-0
lines changed Original file line number Diff line number Diff line change
1
+ package com .baeldung .autovalue ;
2
+
3
+ import java .util .ArrayList ;
4
+ import java .util .Collections ;
5
+ import java .util .List ;
6
+
7
+ import com .google .auto .value .AutoValue ;
8
+
9
+ @ AutoValue
10
+ public abstract class Person {
11
+
12
+ public abstract String name ();
13
+
14
+ public abstract List <String > favoriteMovies ();
15
+
16
+ public static Builder builder () {
17
+ return new AutoValue_Person .Builder ();
18
+ }
19
+
20
+ @ AutoValue .Builder
21
+ public static abstract class Builder {
22
+
23
+ public abstract Builder name (String value );
24
+
25
+ public abstract Builder favoriteMovies (List <String > value );
26
+
27
+ abstract List <String > favoriteMovies ();
28
+
29
+ abstract Person autoBuild ();
30
+
31
+ public Person build () {
32
+ List <String > favoriteMovies = favoriteMovies ();
33
+ List <String > copy = Collections .unmodifiableList (new ArrayList <>(favoriteMovies ));
34
+ favoriteMovies (copy );
35
+ return autoBuild ();
36
+ }
37
+ }
38
+ }
Original file line number Diff line number Diff line change
1
+ package com .baeldung .autovalue ;
2
+
3
+ import static org .junit .Assert .assertEquals ;
4
+ import static org .junit .Assert .assertFalse ;
5
+
6
+ import java .util .ArrayList ;
7
+ import java .util .List ;
8
+
9
+ import org .junit .Test ;
10
+
11
+ /**
12
+ * Unit Test which verifies that the {@link Person} value object creates defensive copies of its favoriteMovies list.
13
+ */
14
+ public class PersonUnitTest {
15
+
16
+ @ Test
17
+ public void givenNewPerson_whenModifyOriginalList_thenValueObjectIsNotAlsoModified () {
18
+ // GIVEN new Person
19
+ List <String > originalFavoriteMoviesList = new ArrayList <String >();
20
+ originalFavoriteMoviesList .add ("Training Day" );
21
+ originalFavoriteMoviesList .add ("Fast and the Furious" );
22
+ Person person = Person .builder ()
23
+ .name ("Dan" )
24
+ .favoriteMovies (originalFavoriteMoviesList )
25
+ .build ();
26
+
27
+ // WHEN modify original list
28
+ originalFavoriteMoviesList .add ("Friday" );
29
+
30
+ // THEN Person remains unaffected
31
+ assertFalse (person .favoriteMovies ()
32
+ .contains ("Friday" ));
33
+ assertEquals (2 , person .favoriteMovies ()
34
+ .size ());
35
+ }
36
+
37
+ }
You can’t perform that action at this time.
0 commit comments