Add additional unit tests to show how lazy loading is working with reflection
This commit is contained in:
parent
45b0ac386e
commit
7cf5b32086
@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user