2012-12-26 13 views
5

Jestem nowy w testowaniu aplikacji na Androida. Stworzyłem platformę automatyzacji przy użyciu kodu Java. Potem próbowałem zintegrować framework z istniejącą aplikacją Robotium Test. Ale wtedy, gdy daję Run as ->Android Junit, aplikacja zostanie zainstalowana pomyślnie testu, ale zgłasza wyjątek Exception during Suite construction.

--i mam dwie klasy java - na przykład Class1_Functional biblioteki i Class2_Automation Framework. Utworzono obiekt klasy Class2_Automation Framework wewnątrz szkieletu Robotium, dzięki czemu mogłem wywołać funkcję zadeklarowaną w klasie, w której domyślam się, że wyjątek zostanie wywołany.

Poniższy kod pokazuje moje ramy 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(); 
    } 
    } 

I moje wyjście logcat daje

----- 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 wyjątek:

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 

będę naprawdę wdzięczny jeśli ktoś może podać mi rozwiązanie dla powyższego zapytania.

+0

Spowodowane przez: java.lang.VerifyError: jp/list/app/test/Function_Lib_Robotium –

+0

czy ten błąd występuje tylko w 4.2 urządzeniach? –

+0

Cóż, dziękuję za odpowiedź. Używam wersji Androida 4.1.2 i nie próbowałem z innymi wersjami. –

Odpowiedz

0

Prawdopodobne przyczyny mogą być następujące:

  1. Tylko upewnij się, że masz włączone pliki JAR.

  2. W deklaracji klasy oświadczenie powinno brzmieć podobnie: public class TestLogin1 rozszerza ActivityInstrumentationTestCase2, gdzie T powinno być twoją klasą, na której uruchamiany jest zestaw testów.

  3. W swojej metodzie setup(), oświadczenie musi być jak:

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

    gdzie getActivity() pobiera aktywności badanego.

Mam nadzieję, że to pomoże!

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

} 

Wydaje mi się to dziwne. Średnia konstruktor jest

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

Również należy zadeklarować JPActivity jako typ rodzajowy dla ActivityInstrumentationTestCase2<JPActivity>.

Powiązane problemy