@Test public void callTheSpinAndWarmUpMethods() throws Exception { Method accessor = checkThatSingletonContainsStaticInstanceAccessorMethod(Earth.class); Earth earth = (Earth) accessor.invoke(null); earth.spin(); earth.warmUp(); }
@Test public void testThatAccessorAlwaysReturnsSameInstance() throws Exception { Method accessor = checkThatSingletonContainsStaticInstanceAccessorMethod(Earth.class); Earth earth1 = (Earth) accessor.invoke(null); Earth earth2 = (Earth) accessor.invoke(null); assertSame("Instances returned should be the same", earth1, earth2); }
@Test public void checkThatOtherMethodsAreNonStatic() throws NoSuchMethodException { Method spin = Earth.class.getDeclaredMethod("spin"); assertFalse("Method spin() should not be static", Modifier.isStatic(spin.getModifiers())); Method warmUp = Earth.class.getDeclaredMethod("warmUp"); assertFalse("Method warmUp() should not be static", Modifier.isStatic(warmUp.getModifiers())); }
private Method checkThatSingletonContainsStaticInstanceAccessorMethod(Class clazz) { for (Method method : clazz.getDeclaredMethods()) { if (method.getReturnType() == clazz && method.getParameterTypes().length == 0) { assertTrue( "Method returning the Earth instance should be static", Modifier.isStatic(method.getModifiers())); return method; } } fail("No static accessor method found."); return null; // will never be called. }