Ah, thank you very much.  That bit of information about the test
runner helped tremendously.  Believe it or not, I did some fairly
exhaustive searches on Google regarding this issue, but I always
referenced Android in some way. Had I just search on running JU 4 on
JU 3, I may have found the same answer you did.  I truly appreciate
your assistance, and I'll try out your suggestion right now.

Thank You,
Eric


On Aug 19, 7:46 pm, "A. Elk" <[email protected]> wrote:
> I have never tried to use vanilla JUnit 4 running under Android. I am
> not absolutely certain, but I predict that it won't work. To run any
> test, you need to use InstrumentationTestRunner, and it assumes JUnit
> 3, which is substantially different from JUnit 4. However, the
> documentation for JUnit 4 says:
>
> You make your JUnit 4 test classes accessible to a TestRunner designed
> to work with earlier versions of JUnit, declare a static method suite
> that returns a test.
>
>     public static junit.framework.Test suite() {
>         return new JUnit4TestAdapter(Example.class);
>     }
>
> I'd look at the Javadoc for junit.framework.*. When I Googled it, I
> saw that it included JUnit4TestAdapter. Better yet, search for help on
> running JUnit 4 tests under JUnit 3. InstrumentationTestRunner is
> designed to work with earlier versions of JUnit, so anything that can
> convert a JUnit 4 suite to JUnit 3 should work in Android. That the
> documentation for JUnit 4 includes instructions for running JUnit 4
> suites under an earlier test runner implies that it's a known
> situation, so I assume somebody else has written about it. Seems like
> nobody else writing for Android has encountered it (or bothered to
> reply), but at least for "vanilla" tests someone probably has done
> something.
>
> Sorry I can't help you any more.
>
> PS - I notice that the main differences between JUnit 3 and JUnit 4
> tests are a) JUnit 3 denotes a test suite by subclassing
> junit.framework.TestCase (JUnit 4 has no such requirement) b) JUnit 3
> test methods are denoted by the string "test" as the prefix of the
> method name, while JUnit 4 uses the @Test annotation. It doesn't seem
> to me that there are any other substantial differences, but as I have
> already said, I am not a JUnit 4 expert.
>
> On Aug 19, 3:33 pm, Eric <[email protected]> wrote:
>
>
>
> > 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