@Override protected void after() { for (int i=0; i< classNames.length;i++) { String classNameToReset = classNames[i]; try { org.evosuite.runtime.classhandling.ClassResetter.getInstance().reset(classNameToReset); } catch (Throwable t) { } } } }
/** * Reset the static state of all the given classes. * * <p> * This method will be usually called after a test is executed, ie in a @After * </p> * * @param classNames */ public static void resetClasses(String... classNames) { for (int i=0; i< classNames.length;i++) { String classNameToReset = classNames[i]; ClassResetter.getInstance().reset(classNameToReset); } }
@Test public void testResetOfEnum() throws Exception{ ClassLoader loader = new EvoClassLoader(); RuntimeSettings.resetStaticState = true; ClassResetter.getInstance().setClassLoader(loader); String cut = "com.examples.with.different.packagename.classhandling.FooEnum"; Class<?> klass = loader.loadClass(cut); Method m = klass.getDeclaredMethod("check"); boolean val = false; val = (Boolean) m.invoke(null); Assert.assertTrue(val); ClassResetter.getInstance().reset(cut); //make sure that the reset does not create new enum instance values val = (Boolean) m.invoke(null); Assert.assertTrue(val); }
@Ignore @Test public void testResetOfMutableEnum() throws Exception{ ClassLoader loader = new EvoClassLoader(); RuntimeSettings.resetStaticState = true; ClassResetter.getInstance().setClassLoader(loader); String cut = MutableEnum.class.getCanonicalName(); Class<?> klass = (Class<MutableEnum>) loader.loadClass(cut); Object[] enums = klass.getEnumConstants(); Assert.assertEquals(2, enums.length); Method getter = klass.getDeclaredMethod("getLetter"); Assert.assertEquals("a", getter.invoke(enums[0])); Assert.assertEquals("b", getter.invoke(enums[1])); Method m = klass.getDeclaredMethod("changeLetter"); m.invoke(enums[0]); Assert.assertEquals("X", getter.invoke(enums[0])); Assert.assertEquals("b", getter.invoke(enums[1])); ClassResetter.getInstance().reset(cut); Assert.assertEquals("a", getter.invoke(enums[0])); Assert.assertEquals("b", getter.invoke(enums[1])); } }