测试套件构造失败 - (android.test.suitebuilder.TestSuiteBuilder $ FailedToCreateTests)。怎么解决?

时间:2012-12-26 12:53:22

标签: java android testing robotium

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

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

以下代码显示了我的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 -----

Junit异常:

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

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

2 个答案:

答案 0 :(得分:0)

可能的原因可能是:

  1. 请确保您已包含JAR文件。

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

  3. 在setup()方法中,语句必须如下:

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

    其中getActivity()获取测试中的活动。

  4. 希望这会有所帮助!!

答案 1 :(得分:0)

@SuppressWarnings({ "unchecked", "deprecation" })
public TestLogin1() throws ClassNotFoundException
{
    super(TARGET_PACKAGE_ID,launcherActivityClass);

}

这对我来说很奇怪。

是标准构造函数
@SuppressWarnings({ "unchecked", "deprecation" })
public TestLogin1() throws ClassNotFoundException
{
    super(JPActivity.class);
}

另请务必将JPActivity声明为ActivityInstrumentationTestCase2<JPActivity>的通用类型。