I absolutely want my POJO JUnit 4 tests running on the Android
emulator VM, even if they do not reference Android APIs.  The reason
for this is fairly clear.  Android has a different implementation of
the base Java APIs, and it uses a special VM, so I want to know that
all of the shared code I will take advantage of beneath the Android UI
layer will run without fail on the emulator.

I hate to say this, but I am _still_ confused as to whether or not
this is possible.  Your eloquent answer didn't seem to answer the
question specifically.  Quite simply, is it even possible to run POJO
JUnit 4 test suites on the Android device itself, and if so, what is
the best/quickest way to achieve this from a configuration standpoint
in Eclipse?


On Aug 19, 4:27 pm, "A. Elk" <[email protected]> wrote:
> JUnit tests Plain Old Java Objects (POJOs). Basically, it loads your
> test class, runs a method, instantiates the class that you're testing,
> tests the methods, does the asserts, and outputs the results. It
> assumes that all the dependencies are built into the application
> or .jar file or are on the classpath.
>
> If you want to test a method in a class that subclasses an Android
> class or depends on an Android class, then you have to test within the
> Android framework, which is based on JUnit 3. This means that you have
> to use one of the test classes in android.test.*, and you have to use
> the instrumented test runner InstrumentationTestRunner (or one of its
> subclasses). Instructions for doing this are in the Android 2.2 SDK
> documentation under Testing and Instrumentation.
>
> If you run something "inside" the emulator, you're running it in
> Android, and the assumption is that it's dependent on the Android API.
> For this reason, you can't test it with test cases built for JUnit 4.
> However, I have to assume that since these tests are based on JUnit 4,
> you wrote them prior to starting with Android, and so the classes/
> methods they test do not depend on Android (or they didn't at some
> point in the past).
>
> For that reason, if you are *unit* testing these classes/methods, you
> shouldn't have to use the emulator. You should be able to construct
> the dependencies in the test fixture, run them with a JUnit 4 test
> runner, do the asserts, and look at the results. I doubt that this is
> possible within Android, because Android assumes that you're testing
> under Android. So you'd have to use something other than the Dalvik
> VM, which means you can't use the emulator (as far as I know). Seems
> to me that chances are pretty slim that a test would pass in a non-
> Dalvik VM and then fail in Android.
>
> If the classes you want to test have any dependency on Android
> classes, then you *have* to test them in Android. By the way, TFJ said
> that you need to do dummy implementations of Bundle and Intent. What I
> think he's saying is that you have to do this to run JUnit 4 tests in
> Android. If you convert your tests to JUnit 3 style, then Android
> itself provides testing implementations and environments. See the
> Android 2.2 SDK that I mentioned previously.
>
> Elk.
>
> On Aug 19, 8:36 am, Eric <[email protected]> wrote:
>
>
>
> > On Aug 19, 9:57 am, "The.French.DJ" <[email protected]> wrote:
>
> > > It depends on what parts you want to test. If you need the android
> > > test framework classes for testing activities and services in a valid
> > > android context then i am not sure if you can make junit 4 work with
> > > it.
>
> > > However, if you extract your app logic into android independant
> > > classes then you can test them by having junit 4 in the classpath
> > > before the android jar.
>
> > Thank you for the info.  However, what I don't understand is, will the
> > JUnit 4 tests be run INSIDE the Android emulator, or outside the
> > emulator on my Mac in a separate Java VM?  Ideally I want the JUnit 4
> > tests to be run INSIDE the Android emulator so that I know my code
> > will be 'ok' when run on an Android device.
>
> > - Eric

-- 
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

Reply via email to