5

I'm new to Android application testing.I created an automation framework using java code. Then I tried to integrate the framework with the existing Robotium Test App. But then when i give Run as--> Android Junit,the test app gets installed successfully but it throws an exception Exception during Suite construction.

--I have got two java classes - for eg Class1_Functional library and Class2_Automation Framework. I created an object of the Class Class2_Automation Framework inside the Robotium framework and thus i could call the function declared inside the class where i guess the exception gets triggered.

The below code shows my Robotium framework

package jp.list.app.test;

    import java.io.IOException;
    import java.util.Arrays;
    import android.app.Activity;

    import com.jayway.android.robotium.solo.Solo;

    import  android.test.ActivityInstrumentationTestCase2;
    import android.util.Log;
    import jp.list.app.test.Automation_Framework;
    @SuppressWarnings("unchecked")
    public class TestLogin1 extends ActivityInstrumentationTestCase2
    {

        ///////////////// 
        //Created the object of the class Automation framework where the exception occurs
        ////////////////

    private Automation_Framework autoobj = new Automation_Framework();
    private static final
    String  TARGET_PACKAGE_ID = "jp.list.app";
    private static final
    String LAUNCHER_ACTIVITY_FULL_CLASSNAME ="jp.list.app.JPActivity";

    //Parameters used for the Automation Framework
    String excel_path ="/mnt/sdcard/Automation_Framework_Robotium.xls";
//  String excel_path ="C:\\Automation_Framework\\Automation_Framework_Robotium.xls";
    String screenshot_path ="/mnt/sdcard/Screenshots";
//  String screenshot_path = "C:\\Automation_Framework\\Screenshots";
    String excelsheet_flow ="Execution_Flow";
    String excelsheet_data ="Data";
    int stepidindex_flow = 2 ;
    int tobeexctdindex_flow = 3;
    int funtionflowindex_flow = 6;
    int statusindex_flow = 7;
    int executioncommentsindex_flow = 8;
    int stepidindex_data = 0;
    int funtionnameindex_data = 1;
    int dataindex_data = 2;
    int elementidindex_data = 3;

    private static  Class<?>launcherActivityClass;
    static{
    try
    {
    launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
    }
    catch(ClassNotFoundException e)
    {
    throw new
    RuntimeException(e);
    }
    }
    @SuppressWarnings({ "unchecked", "deprecation" })
    public TestLogin1() throws ClassNotFoundException
    {
        super(TARGET_PACKAGE_ID,launcherActivityClass);

    }
    private Solo solo;
    private Activity activity;

    @Override
    protected void setUp()throws Exception
    {
        super.setUp();
        this.activity=this.getActivity();
    this.solo = new Solo(getInstrumentation(),this.activity);
    }

    public void test_framework()
    {
        try {
            autoobj.driver_function(excel_path, screenshot_path, excelsheet_flow, stepidindex_flow, tobeexctdindex_flow, funtionflowindex_flow, statusindex_flow, executioncommentsindex_flow, excelsheet_data, stepidindex_data, funtionnameindex_data, dataindex_data, elementidindex_data);
        } catch (IOException e) {
            Log.v("output", e.toString());
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    @Override
    public void tearDown()throws Exception
    {
    try
    {
    solo.finalize();
    }
    catch(Throwable e)
    {
    e.printStackTrace();
    }
    getActivity().finish();
    super.tearDown();
    }
    }

And my logcat output gives

----- begin exception -----
                java.lang.RuntimeException: Exception during suite construction
                at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:238)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                    at junit.framework.TestCase.runTest(TestCase.java:168)
                    at junit.framework.TestCase.runBare(TestCase.java:134)
                    at junit.framework.TestResult$1.protect(TestResult.java:115)
                    at junit.framework.TestResult.runProtected(TestResult.java:133)
                    at junit.framework.TestResult.run(TestResult.java:118)
                    at junit.framework.TestCase.run(TestCase.java:124)
                    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
                    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
                    at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
                    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
                Caused by: java.lang.reflect.InvocationTargetException
                    at java.lang.reflect.Constructor.constructNative(Native Method)
                at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
                    at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87)
                    at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73)
                    at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:262)
                at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184)
                    at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:379)
                    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4142)
                at android.app.ActivityThread.access$1300(ActivityThread.java:130)
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
                    at android.os.Handler.dispatchMessage(Handler.java:99)
                    at android.os.Looper.loop(Looper.java:137)
                    at android.app.ActivityThread.main(ActivityThread.java:4745)
                    at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                    at dalvik.system.NativeStart.main(Native Method)
                 Caused by: java.lang.VerifyError: jp/list/app/test/Function_Lib_Robotium
                at jp.list.app.test.Automation_Framework.<init>(Automation_Framework.java:37)
                    at jp.list.app.test.TestLogin1.<init>(TestLogin1.java:15)
                    ... 18 more
                 ----- end exception -----

Junit Exception:

java.lang.RuntimeException: Exception during suite construction
                at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:238)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
                at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
                at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
                at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
                Caused by: java.lang.reflect.InvocationTargetException
                at java.lang.reflect.Constructor.constructNative(Native Method)
                at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
                at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87)
                at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73)
                at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:262)
                at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184)
                at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:379)
                at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4142)
                at android.app.ActivityThread.access$1300(ActivityThread.java:130)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
                at android.os.Handler.dispatchMessage(Handler.java:99)
                at android.os.Looper.loop(Looper.java:137)
                at android.app.ActivityThread.main(ActivityThread.java:4745)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                at dalvik.system.NativeStart.main(Native Method)
                Caused by: java.lang.VerifyError: jp/list/app/test/Function_Lib_Robotium
                at jp.list.app.test.Automation_Framework.<init>(Automation_Framework.java:37)
                at jp.list.app.test.TestLogin1.<init>(TestLogin1.java:15)
                ... 18 more

I would really appreciate if anyone could provide me with a solution for the above query.

Code-Apprentice
  • 81,660
  • 23
  • 145
  • 268

2 Answers2

0

The probable reasons could be:

  1. Just make sure that you have included the JAR files.

  2. In the class declaration statement should be like: public class TestLogin1 extends ActivityInstrumentationTestCase2 where T should be your class over which the test suite is being run.

  3. In your setup() method, the statement has to be like:

    this.solo = new Solo(getInstrumentation(),getActivity());
    

    where getActivity() fetches the activity under test.

Hope this helps!!

Code-Apprentice
  • 81,660
  • 23
  • 145
  • 268
Priety
  • 308
  • 1
  • 4
  • 19
0
@SuppressWarnings({ "unchecked", "deprecation" })
public TestLogin1() throws ClassNotFoundException
{
    super(TARGET_PACKAGE_ID,launcherActivityClass);

}

This looks strange to me. The standard constructor is

@SuppressWarnings({ "unchecked", "deprecation" })
public TestLogin1() throws ClassNotFoundException
{
    super(JPActivity.class);
}

Also be sure to declare the JPActivity as the generic type for ActivityInstrumentationTestCase2<JPActivity>.

Code-Apprentice
  • 81,660
  • 23
  • 145
  • 268