Hello everyone,
I am trying to setup a project with Android studio for my QA team to start building blackbox automation tests using robotium.
So the idea is, the tester will get the APK from the build server, resign with the re-sign.jar utility I got from your site, and then
start their android studio to develop tests using Solo, (we plan to also get a license for the recorder, but first off step1 needs to work)
the idea is that I want them to be able to do complete blackbox testing.
However when I try to start a simple test, the test suite breaks and tells me that it cannot instantiate the class I am calling from the UI
Package names are all good, tests are failing due to the following error.
Could you help ?
This is my error log :
08-09 18:49:56.627: I/ActivityManager(293): Force stopping package com.example.test uid=10066
08-09 18:49:56.627: I/ActivityManager(293): Start proc com.my_app_package.test for added application com.my_app_package.test: pid=2672 uid=10066 gids={1028}
08-09 18:49:56.635: W/dalvikvm(2672): Exception Ljava/lang/RuntimeException; thrown while initializing Lcom/my_app_package/test/ApplicationTest;
08-09 18:49:56.635: W/dalvikvm(2672): Class init failed in Constructor.constructNative (Lcom/my_app_package/test/ApplicationTest;)
08-09 18:49:56.635: D/AndroidRuntime(2672): Shutting down VM
08-09 18:49:56.635: W/dalvikvm(2672): threadid=1: thread exiting with uncaught exception (group=0xa62fc288)
08-09 18:49:56.639: D/AndroidRuntime(2664): Shutting down VM
08-09 18:49:56.639: D/dalvikvm(2664): GC_CONCURRENT freed 102K, 89% free 455K/4096K, paused 0ms+0ms, total 1ms
08-09 18:49:56.639: D/jdwp(2664): Got wake-up signal, bailing out of select
08-09 18:49:56.639: D/dalvikvm(2664): Debugger has detached; object registry had 1 entries
08-09 18:49:56.639: I/AndroidRuntime(2664): NOTE: attach of thread 'Binder_3' failed
08-09 18:49:56.639: E/AndroidRuntime(2672): FATAL EXCEPTION: main
08-09 18:49:56.639: E/AndroidRuntime(2672): java.lang.ExceptionInInitializerError
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.reflect.Constructor.constructNative(Native Method)
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
08-09 18:49:56.639: E/AndroidRuntime(2672): at junit.framework.TestSuite.createTest(TestSuite.java:61)
08-09 18:49:56.639: E/AndroidRuntime(2672): at junit.framework.TestSuite.addTestMethod(TestSuite.java:294)
08-09 18:49:56.639: E/AndroidRuntime(2672): at junit.framework.TestSuite.addTestsFromTestCase(TestSuite.java:150)
08-09 18:49:56.639: E/AndroidRuntime(2672): at junit.framework.TestSuite.<init>(TestSuite.java:129)
08-09 18:49:56.639: E/AndroidRuntime(2672): at junit.runner.BaseTestRunner.getTest(BaseTestRunner.java:118)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.test.AndroidTestRunner.getTest(AndroidTestRunner.java:148)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.test.AndroidTestRunner.setTestClassName(AndroidTestRunner.java:56)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.test.suitebuilder.TestSuiteBuilder.addTestClassByName(TestSuiteBuilder.java:80)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.test.InstrumentationTestRunner.parseTestClass(InstrumentationTestRunner.java:444)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.test.InstrumentationTestRunner.parseTestClasses(InstrumentationTestRunner.java:425)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:370)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4142)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.app.ActivityThread.access$1300(ActivityThread.java:130)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.os.Handler.dispatchMessage(Handler.java:99)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.os.Looper.loop(Looper.java:137)
08-09 18:49:56.639: E/AndroidRuntime(2672): at android.app.ActivityThread.main(ActivityThread.java:4745)
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.reflect.Method.invoke(Method.java:511)
08-09 18:49:56.639: E/AndroidRuntime(2672): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-09 18:49:56.639: E/AndroidRuntime(2672): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-09 18:49:56.639: E/AndroidRuntime(2672): at dalvik.system.NativeStart.main(Native Method)
08-09 18:49:56.639: E/AndroidRuntime(2672): Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.my_app_package.ui.activities.SplashScreen
08-09 18:49:56.639: E/AndroidRuntime(2672): at com.my_app_package.test.ApplicationTest.<clinit>(ApplicationTest.java:15)
08-09 18:49:56.639: E/AndroidRuntime(2672): ... 24 more
08-09 18:49:56.639: E/AndroidRuntime(2672): Caused by: java.lang.ClassNotFoundException: com.my_app_package.ui.activities.SplashScreen
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.Class.classForName(Native Method)
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.Class.forName(Class.java:217)
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.Class.forName(Class.java:172)
08-09 18:49:56.639: E/AndroidRuntime(2672): at com.example.test.ApplicationTest.<clinit>(ApplicationTest.java:13)
08-09 18:49:56.639: E/AndroidRuntime(2672): ... 24 more
08-09 18:49:56.639: E/AndroidRuntime(2672): Caused by: java.lang.NoClassDefFoundError: com/my_app_package/ui/activities/SplashScreen
08-09 18:49:56.639: E/AndroidRuntime(2672): ... 28 more
08-09 18:49:56.639: E/AndroidRuntime(2672): Caused by: java.lang.ClassNotFoundException: com.my_app_package.ui.activities.SplashScreen
08-09 18:49:56.639: E/AndroidRuntime(2672): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
08-09 18:49:56.639: E/AndroidRuntime(2672): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
08-09 18:49:56.639: E/AndroidRuntime(2672): ... 28 more
08-09 18:49:56.639: W/ActivityManager(293): Error in app com.my_app_package.test running instrumentation ComponentInfo{com.my_app_package/android.test.InstrumentationTestRunner}:
08-09 18:49:56.639: W/ActivityManager(293): java.lang.ClassNotFoundException
08-09 18:49:56.639: W/ActivityManager(293): java.lang.ClassNotFoundException: com.my_app_package.ui.activities.SplashScreen
08-09 18:49:56.639: I/ActivityManager(293): Force stopping package com.my_app_package.test uid=10066
I have the following config :
Gradle Build file :
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "23.0.0 rc3"
defaultConfig {
applicationId "com.my_app_package.test"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
testApplicationId "com.my_app_package"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:22.2.1'
androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.4.1'
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AndroidManifest.xml file :
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="
http://schemas.android.com/apk/res/android"
package="com.my_app_package.test" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-library android:name="android.test.runner"/>
<uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
</application>
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.my_app_package" />
</manifest>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ApplicationTest.java :
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.my_app_package.test;
import com.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
public class ApplicationTest extends ActivityInstrumentationTestCase2 {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.my_app_package.ui.activities.SplashScreen";
private static Class launcherActivityClass;
static {
try {
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
public ApplicationTest() throws ClassNotFoundException {
super(launcherActivityClass);
}
private Solo solo;
@Override
protected void setUp() throws Exception {
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}
public void testDisplayBlackBox() {
assertEquals(true, false);
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------