diff --git a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderThreadSafeTest.java b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderThreadSafeTest.java new file mode 100644 index 000000000..90cf7c02c --- /dev/null +++ b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderThreadSafeTest.java @@ -0,0 +1,41 @@ +package com.iluwatar.lazy.loading; + +import org.junit.Test; + +import java.lang.reflect.Field; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +/** + * Using reflection this test shows that the heavy field is not instantiated until the method getHeavy is called + * + * Created by jones on 11/10/2015. + */ +public class HolderThreadSafeTest { + + @Test + public void test() throws IllegalAccessException { + HolderThreadSafe hts = new HolderThreadSafe(); + + {//first call is null + Field[] f = HolderThreadSafe.class.getDeclaredFields(); + assertEquals("One field only in HolderThreadSafe", 1, f.length); + f[0].setAccessible(true); + + assertNull(f[0].get(hts)); + } + + // now it is lazily loaded + hts.getHeavy(); + + {//now it is not null - call via reflection so that the test is the same before and after + Field[] f = HolderThreadSafe.class.getDeclaredFields(); + assertEquals("One field only in HolderThreadSafe", 1, f.length); + f[0].setAccessible(true); + + assertNotNull(f[0].get(hts)); + } + } +}