Lately I noticed a bug in my Android app which doesn't happen when I run the same code on the desktop (since the app is written on top of libgdx, 99% of the code is the same on desktop and Android.) I decided to explore why by writing some unit tests. However, while the tests run fine on the desktop, I get the "Failed to launch test" error when I try to run the tests on Android:
[2013-03-09 19:06:45 - zzz-test-android] Installing zzz-test-android.apk...
[2013-03-09 19:06:48 - zzz-test-android] Success!
[2013-03-09 19:06:48 - zzz-test-android] Launching instrumentation android.test.InstrumentationTestRunner on 015d15b51d30180b
[2013-03-09 19:06:48 - zzz-test-android] Failed to launch test
The way my project is set up in Eclipse is that I have two projects: A "zzz-test" which contains the test classes and the JUnit3 libs. Then a second "zzz-test-android" project (which was created via "New Android Test Project") which has a dependency on zzz-test.
Any ideas on what I might be doing wrong, or at least a way to get an error message that might be more helpful?
Can it be related with some missing permission in manifest file?
Related
I'm having problems with Robotium being unable to find my app at runtime.
Just to be clear, I've seen a few similar questions on SO however, they seem to revolve around the Robotium Solo class not being found at runtime (or some other 3rd party lib). However, this is slightly different as my Robotium tests can't find the project under test.
The tests are in a separate project which has a dependency on my app project. There are no problems at compile-time but when I try to run the tests I get...
java.lang.RuntimeException: Exception during suite construction
at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests
....
Caused by: java.lang.NoClassDefFoundError: com.myapp.mobile.activity.RegisterUserScreen
Where RegisterUserScreen is an activity in my app. This happens on the device and the emulator.
I'm building / running in IntelliJ 12.1.4, against Android 4.1.2 and I see the same result when I attempt to run the test from the command line.
Probably worth pointing out that running adb shell pm list instrumentation from the command line returns the correct instrumentation...
instrumentation:com.myapp.mobile.test.system/android.test.InstrumentationTestRunn
er (target=com.myapp.mobile)
Thanks in advance,
Neil.
In your device go to settings->apps and check whether in installed or running application list name of your testing application name is present. If you find it there then uninstall the testing app as well as your original app (which has to be tested). Many times it happens that either because of different versions/signature mismatch test-application fails to find the target application.
Create your run configuration as an "Android Tests" not as "JUnit"
I am creating a unit testing project for my application. It was working fine before. but I had updated the ADT plugin and android SDK. after that I could launch this project but cannot separately run the test cases. It will execute first test case and then stop. Before I could manually execute the second testcase. But now when I tried to do that I got error "Test launch failed due to internal error: Running tests on UI thread".please help me to solve this...
note:using robotium 3.2.1
Are you running the indidual method from a test from the Eclipse Junit window? Try running the test method from project explorer. Right click and run from the Project Explorer, not the JUnit window.
RightHandedMonkey's work-around works for me.
It also looks like this is a known issue and will be fixed in ADT 21 (see: http://code.google.com/p/android/issues/detail?id=34170)
There's also a changelist there to pull the fix if you are building the ADT from source.
I've created a Test project in eclipse to run some tests for one of my android library. I can run it without problems in eclipse on my device. Is it possible to run these tests on other devices without having them connected to eclipse? I want to send the test project apk to other people so they can run the tests on their device.
I think I'd need something like a test runner app that runs the test and displays the result on the device itself. Does anyone know such an app?
Thanks
Is it possible to run these tests on other devices
without having them connected to eclipse?
yes it is!!
just send the tested .apk file to their mobile, install and use app.
no need any test runner app for this, i have checked it.
I'm working on a project defined with maven, and I can successfully run the maven script to build the app, and run automated (junit 3.8.2) tests on the device with instrumentation.
Likewise I can use adb to run the instrumentation tests successfully.
However running the instrumentation tests from IntelliJ is failing with this:
Running tests
Test running startedTest running failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
Empty test suite.
Logcat shows the not found class as org.junit.Test. The IntelliJ project was created by importing the root pom, and otherwise works fine. I just had to create a Run Configuration for the tests, specifying the instrumentation runner.
I've tried on several devices and they all provide the same result.
I would expect the junit Test class to be in the OS framework on the device, so I'm confused as to why it's not being found. I've tried setting the junit dependency in IntelliJ from Provided to Compile, but that makes no difference.
What have I missed?
Okay this is an old question, however, most likely you'll have different classpath in maven as compared to intelliJ. You can solve this pretty easily by going to the intelliJ project Structure ( File --> Project Structure or Ctrl + Alt + Shift + S).
Under Project Settings, click Libraries and manually add the library that is missing.
I do find it strange though that IntelliJ is not picking up maven dependencies. After all, if maven runs it, so should intelliJ - it has the best maven integration available in an IDE and VERY VERY much better than that of eclipse. So your issue does make me feel something else is the root cause...
Perhaps you can ask the IntelliJ people?
More info on your part could allow us to give better feedback...
I'm trying to integrate Android JUnit tests with our Bamboo Ant builds. I've already tested the setup locally, and I'm able to run tests.
But when I tried the same setup in our Bamboo server, I get the following error when running the tests:
INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.synapticstuff.guitartabs/pl.polidea.instrumentation.PolideaInstrumentationTestRunner}
INSTRUMENTATION_STATUS_CODE: -1
android.util.AndroidException: INSTRUMENTATION_FAILED: com.synapticstuff.guitartabs/pl.polidea.instrumentation.PolideaInstrumentationTestRunner
Note that I used a custom library for Instrumentation (http://code.google.com/p/the-missing-android-xml-junit-test-runner/), so that I can pull the JUNit xml test results and feed it to Bamboo.
Also, the build agent used in creating the build is an Ubuntu VM, which doesn't have any GUI so I need to do everything via command line. An AVD is already running on that VM.
I did encounter the same problem when I first ran the adb shell am instrument .. <snip> command locally, and I found it weird it worked after running the test from Eclipse.
Looking up the error log, the Android Instrumentation Framework article tells me that
"It's possible that the
instrumentation apk isn't installed on
your device or that the package name
is incorrect in the Manifest file."
so it must be that the instrumentation apk isn't installed.
So, how do I install the instrumentation apk onto the AVD?
Thanks!
There are probably multiple situations that can cause this error, but I got it from not having an instrumented version of the test package installed on the emulator. Documentation is a bit scant, but I don't think there's an "instrumentation APK" that you install onto the emulator (at least I couldn't find such a thing); you build your test application with instrumentation included. Anyway, this is how I run tests from the command line using ant, which now works:
ant instrument install test
and this also works running on Jenkins using the Android emulator plugin (https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin). I found the instrument task in the command line build documentation here: http://developer.android.com/tools/building/building-cmdline.html.
There is another possible reason: the package name is incorrect in the Manifest file.
Check the package name in your unit test project's manifest file first!
I am also one of the few people who downloaded that custom InstrumentationTestRunner (http://code.google.com/p/the-missing-android-xml-junit-test-runner/) and I am currently stuck on this issue! I get the same error message, unfortunately I do not know the answer right now, but will update when I discover something helpful.
In the meantime I looked for other options like this person's Test Runner: http://www.alittlemadness.com/2010/07/14/android-testing-xml-reports-for-continuous-integration/
There is also another discussion related to continuous integration: How to Generate Android Testing Report in HTML Automatically
you can maybe solve this, if you add to your build script:
adb install -r testproject/bin/testproject.apk
checkout first how the apk-file is being named, because i still didn't figure out, how ant is going to do that exactly, but it's being created usually in bin directory.
See also the official android documentation.
I ran into this problem when running my tests against an old Android 1.5 virtual device. After switching to a 2.3.3 virtual device the problem went away. I don't know if the problem is due to the virtual device OS being old or the virtual device being created with old Android SDK tools.
I was running into the exact same problem with running an android build under Bamboo. I found that for some reason the android:targetPackage element in my test project manifest was incorrect. It was set to be the package of my main project, not the test project. For some reason running when running the tests in eclipse eveything worked fine, but it died when I tried to run the ant test at the command line. The instrumentation instrumentation tag read:
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.blah" />
This was automatically generated by eclipse when I created the project. I changed it to read:
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.blah.test" />
and suddenly everything ran fine.