views:

110

answers:

1

According to this SDK guide, unit-testing a Library project can be achieved by creating a standard application project, reference the Library project and then instrument the application for unit testing.

However, when I do this and launch the test application I get the message

No tests found with test runner 'JUnit 3'.

I'm using Eclipse and the Android ADT plugin, all latest versions.

Note: the projects compile just fine. The test project also installs fine to the emulator. But in the console I can see that it looks for <library>.apk, which of course doesn't exist since I'm compiling this as a library into the test project.

Anyone got this to work? And if so, what is the trickery here?

Update: after discovering and fixing a problem, which was actually including the test classes (!), the test runner now can find all tests. But, all the tests fail with the following exceptions:

java.lang.NoClassDefFoundError: <nameOfClassInLibraryProject>

nameOfClassInLibraryProject are classes defined in the library project. These classes should be compiled into the test project, and indeed, everything compiles just fine. But when running the test project, the runtime doesn't seem to find the library classes.

A: 

After much fiddling and wasted time in Eclipse I have managed to get Android Library projects to work.

According to the Working with Library Projects article:

Instead, you must compile the library indirectly, by referencing the library from a dependent application's build path, then building that application.

The problem was that I interpreted this to mean that the library project should be added to the Projects tab in Java Build Path. Doing this makes the test project compile since the library code is obviously available to the compiler. But since the library is not compiled into a .jar or .apk in itself, the library classes are never deployed to the device.

The solution is to not add the library project to Projects, rather on the Source tab, add the library /src folder using the Link Source... button. And yes, it is the library src folder, not the library project root, that must be linked into the test project.

Peter Lillevold