5

我是 Android 应用程序测试的新手。我使用 java 代码创建了一个自动化框架。然后我尝试将该框架与现有的 Robotium Test App 集成。但是当我给Run as-->Android Junit时,测试应用程序已成功安装,但会引发异常Exception during Suite construction.

--我有两个java类——例如Class1_Functional库和Class2_Automation框架。我在Class2_Automation FrameworkRobotium 框架内创建了一个类的对象,因此我可以调用在类中声明的函数,我猜想会触发异常。

下面的代码显示了我的 Robotium 框架

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();
    }
    }

我的 logcat 输出给出了

----- 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 -----

君特异常:

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

如果有人能为我提供上述查询的解决方案,我将不胜感激。

4

2 回答 2

0

可能的原因可能是:

  1. 只需确保您已包含 JAR 文件即可。

  2. 在类声明语句中应该是这样的: public class TestLogin1 extends ActivityInstrumentationTestCase2 其中 T 应该是运行测试套件的类。

  3. 在您的 setup() 方法中,语句必须类似于:

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

    其中 getActivity() 获取被测活动。

希望这可以帮助!!

于 2013-07-31T18:16:43.637 回答
0
@SuppressWarnings({ "unchecked", "deprecation" })
public TestLogin1() throws ClassNotFoundException
{
    super(TARGET_PACKAGE_ID,launcherActivityClass);

}

这对我来说看起来很奇怪。标准构造函数是

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

还要确保将 声明JPActivityActivityInstrumentationTestCase2<JPActivity>.

于 2014-04-24T20:23:42.597 回答