Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Self-contained test library project cannot find the library classes

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.

like image 429
Peter Lillevold Avatar asked Aug 17 '10 16:08

Peter Lillevold


People also ask

What does .test do in Java?

Java testing provides thorough and functioning test cases that can test every aspect of your application. A JUnit test case is exactly what it sounds like: a test scenario measuring functionality across a set of actions or conditions to verify the expected result. JUnit is a simple framework to write repeatable tests.

What is the class used to run the JUnit test in GUI?

The central class of JUnit is TestCase, which represents a fixture that provides the framework to run unit tests and store the results.

Which of the following is correct about a unit test case?

Q 10 - Which of the following is correct about a Unit Test Case? A - A Unit Test Case is a part of code which ensures that the another part of code (method) works as expected.


1 Answers

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.

like image 134
Peter Lillevold Avatar answered Sep 23 '22 05:09

Peter Lillevold