It is indeed because of the call to 'super.tearDown()'. The 'tearDown' implementation of the ActivityTestCase class calls a protected method called 'scrubClass(...)'. This class sets every declared field of the test-case to null (as long as it is not primitive).
You need to override 'scrubClass(...)' to remove this 'scrubbing' from your test-case. I really don't understand why this 'scrubClass(...)' method was implemented and called. The comments for this method say that it is there to prevent memory leaks for when a test 'gave' a non static inner class 'to someone else'. The cure of implementing this method seems worse than the problem it tries to solve. On Jul 30, 6:02 pm, Streets Of Boston <[email protected]> wrote: > Hello, > > I have this test-code: > ========================= > package somepackage; > > import android.test.ActivityInstrumentationTestCase2; > import android.util.Log; > > import com.kronos.mobile.android.Constants; > import com.kronos.mobile.android.ExceptionsSummaryActivity; > import com.kronos.mobile.android.test.utils.KronosSolo; > > public class ExceptionsSummaryActivityTest extends > ActivityInstrumentationTestCase2<ExceptionsSummaryActivity> { > private static String USER = "tturner"; > > public ExceptionsSummaryActivityTest() { > super("somepackage", ExceptionsSummaryActivity.class); > } > > @Override > protected void setUp() throws Exception { > super.setUp(); > > Log.v(Constants.LOGTAG, "Setup for "+getName()+" "+USER); > } > > @Override > protected void tearDown() throws Exception { > super.tearDown(); > } > > public void test010ResetData() throws Exception { > Log.v(Constants.LOGTAG, "Testcase for "+getName()+" "+USER); > } > > public void test020LoadDataFromHome() throws Exception { > Log.v(Constants.LOGTAG, "Testcase for "+getName()+" "+USER); > } > > public void test030UIElements() { > Log.v(Constants.LOGTAG, "Testcase for "+getName()+" "+USER); > }} > > =================== > The JUnit is a separate Unit Test application (apk), running another > APK (the one under test). > > When I run the above test-code (all the code is shown, nothing has > been left out), the value of USER changes magically from "tturner" to > 'null'. In test010ResetData and the setup of this test, the value of > USER is "tturner". In the other test-method (and their setup() calls), > the value of USER is null. > Ouput: > Setup for test010ResetData tturner > Testcase for test010ResetData tturner > Setup for test020LoadDataFromHome null > Testcase for test020LoadDataFromHome null > Setup for test030UIElements null > Testcase for test030UIElements null > > When i change this line to (adding 'final)' > private static final String USER = "tturner"; > the value of USER remains "tturner" for all test-methods! > Output: > Setup for test010ResetData tturner > Testcase for test010ResetData tturner > Setup for test020LoadDataFromHome tturner > Testcase for test020LoadDataFromHome tturner > Setup for test030UIElements tturner > Testcase for test030UIElements tturner > > When i then change that line to (changing String to Object, still > using 'final'): > private static final String USER = "tturner"; > the value of USER is again 'null' in test020 and test030!! > Ouput: > Setup for test010ResetData tturner > Testcase for test010ResetData tturner > Setup for test020LoadDataFromHome null > Testcase for test020LoadDataFromHome null > Setup for test030UIElements null > Testcase for test030UIElements null > > My question is: > Why and how are static variables (e.g. USER) of JUnit test-cases set > to null? > Is this correct behavior. > > I tried in on a G1 running 1.6 and on a Nexus1 running 2.2. They both > have the same behavior. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

