2014-09-05 7 views
1

У меня есть простое приложение, которое я пытаюсь проверить. Он имеет два действия и две кнопки (каждая кнопка переходит на другую активность - MainActivity и MainActivity2), и я пытаюсь сделать некоторые простые тесты Robotium. Я получаю следующее сообщение об ошибке:Тестирование приложения для Android: Исключение во время сборки пакета

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:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1840) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 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:5142) at android.app.ActivityThread.access$1500(ActivityThread.java:156) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1418) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5872) at java.lang.reflect.Method.invokeNative(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at android.view.ViewConfiguration.get(ViewConfiguration.java:338) at android.view.View.(View.java:3490) at android.view.View.(View.java:3547) at android.widget.TextView.(TextView.java:674) at android.widget.Button.(Button.java:107) at android.widget.CompoundButton.(CompoundButton.java:68) at android.widget.CheckBox.(CheckBox.java:68) at android.widget.CheckBox.(CheckBox.java:64) at android.widget.CheckBox.(CheckBox.java:60) at com.example.twoactivities.test.RobotiumTest1.(RobotiumTest1.java:19) ... 18 more

Я пробовал все, что я могу найти, и ни одно из этих решений не работает для меня. (В конструкторе никаких параметров, не проверяя построить путь для обеспечения баночка в нужном месте, гарантируя, что мое приложение в испытании «отладка» и т.д.)

Моего кода здесь:

package com.example.twoactivities.test; 

import com.example.twoactivities.*; 
import com.robotium.solo.Solo; 
import android.test.ActivityInstrumentationTestCase2; 
import android.widget.CheckBox; 
import android.widget.CheckBox; 
import android.app.Activity;  

public class RobotiumTest1 extends ActivityInstrumentationTestCase2<MainActivity> { 

     private Solo solo; 

     public RobotiumTest1() { 
      super(MainActivity.class); 
     } 

     @Override 
     public void setUp() throws Exception { 
      //setUp() is run before a test case is started. 
      //This is where the solo object is created. 
      solo = new Solo(getInstrumentation(), getActivity()); 
     } 

//  @Override 
//  public void tearDown() throws Exception { 
//   //tearDown() is run after a test case has finished. 
//   //finishOpenedActivities() will finish all the activities that have been opened during the test execution. 
//   solo.finishOpenedActivities(); 
//  } 


     public void testClickButton() throws Exception{ 

      solo.assertCurrentActivity("Expected to be on MainActivity activity", "MainActivity.class"); 
      solo.clickOnButton("Go to page 2"); 
      solo.assertCurrentActivity("Not on Activity 2", MainActivity2.class); 
      solo.clickOnButton("Go to page 1"); 
      solo.assertCurrentActivity("Not on Activity 1", MainActivity.class); 

     }  

    } 

Любых идеи как я могу запустить этот тест?

Спасибо, Стефани

EDIT:

MainActivity

package com.example.twoactivities; 

import com.example.twoactivities.R; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.CheckBox; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
     final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1); 
     final TextView text2 = (TextView) findViewById(R.id.checkBoxTextView); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void activity2(View view){ 
     Intent intent = new Intent(this,com.example.twoactivities.MainActivity2.class); 
     startActivity(intent); 
    } 

    public void onCheckBoxClicked(View view){ 
     if (checkBox.isChecked()) { 
      text2.setText("Checked"); 
     } 
     else { 
      ((TextView) findViewById(R.id.checkBoxTextView)).setText("Unchecked"); 
     } 
    } 
} 

MainActivity2

package com.example.twoactivities; 

import com.example.twoactivities.R; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

    public class MainActivity2 extends Activity { 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main2); 
      } 

      public void activity1(View view){ 
       Intent intent = new Intent(this,com.example.twoactivities.MainActivity.class); 
       startActivity(intent); 
      } 

} 

Я на самом деле не изменилось ничего (я не думаю), так как последний успешно прошел.

Сентябрь 12 Редакции: Объект «соло» инициализировался после того, как я пытался его использовать.

package com.example.twoactivities.test; 

import com.example.twoactivities.*; 
import com.example.twoactivities.R; 
import com.robotium.solo.Solo; 
import android.test.ActivityInstrumentationTestCase2; 
import android.widget.CheckBox; 
import android.widget.TextView; 


public class RobotiumTest1 extends ActivityInstrumentationTestCase2<MainActivity> { 

     public Solo solo; 
     private TextView checkBoxText; 
     public CheckBox checkBox1 ; 

     public RobotiumTest1() { 
      super(MainActivity.class); 
     } 

     @Override 
     public void setUp() throws Exception { 
      //setUp() is run before a test case is started. 
      //This is where the solo object is created. 
      solo = new Solo(getInstrumentation(), getActivity()); 
      checkBoxText = (TextView) getActivity().findViewById(R.id.checkBoxTextView); 
      checkBox1 = (CheckBox) getActivity().findViewById(R.id.checkBox1); 
     } 

     public void testClickButton() throws Exception{ 

      solo.assertCurrentActivity("Expected to be on MainActivity activity", "MainActivity"); 
      solo.clickOnButton("Go to page 2"); 
      solo.assertCurrentActivity("Not on Activity 2", MainActivity2.class); 
      solo.clickOnButton("Go to page 1"); 
      solo.assertCurrentActivity("Not on Activity 1", MainActivity.class); 

     } 

ответ

4

Ключ в журнале, который вы опубликовали.

Caused by: java.lang.NullPointerException 
at android.view.ViewConfiguration.get(ViewConfiguration.java:338) 
at android.view.View.(View.java:3490) 
at android.view.View.(View.java:3547) 
at android.widget.TextView.(TextView.java:674) 
at android.widget.Button.(Button.java:107) 
at android.widget.CompoundButton.(CompoundButton.java:68) 
at android.widget.CheckBox.(CheckBox.java:68) 
at android.widget.CheckBox.(CheckBox.java:64) 
at android.widget.CheckBox.(CheckBox.java:60) at com.example.twoactivities.test.RobotiumTest1.(RobotiumTest1.java:19) ... 18 more 

У вас есть NullPointerException вызывающие проблемы эта NullPointerException в коде приложения не код размещен здесь, однако (Обратите внимание, если вы добавите его, я буду смотреть в него здесь для вас)

EDIT ниже код является вопрос:

public class MainActivity extends Activity { 
      final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1); 
      final TextView text2 = (TextView) findViewById(R.id.checkBoxTextView); 

проблема вы пытаетесь найти мнения, которые не на самом деле не существуют, пока OnCreate() называется так это будет ноль. переместите их инициализацию на onCreate(), и вы должны быть в порядке.

Далее отредактируйте, чтобы ответить на ваш вопрос в комментариях.

Итак, теперь мы находимся вдали от Robotium и в ядре Java, проблема, с которой вы сейчас сталкиваетесь, - это область, в которой вы объявляете переменную и она доступна, отличается от того, где вы ее создаете. Вы можете объявить существование переменных в том же объеме, что и вы, но создайте его в onCreate().

package com.example.twoactivities; 

import com.example.twoactivities.R; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.CheckBox; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
     final CheckBox checkBox; 
     final TextView text2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     checkBox = (CheckBox) findViewById(R.id.checkBox1); 
     text2 = (TextView) findViewById(R.id.checkBoxTextView); 
    } 

    public void activity2(View view){ 
     Intent intent = new Intent(this,com.example.twoactivities.MainActivity2.class); 
     startActivity(intent); 
    } 

    public void onCheckBoxClicked(View view){ 
     if (checkBox.isChecked()) { 
      text2.setText("Checked"); 
     } 
     else { 
      ((TextView) findViewById(R.id.checkBoxTextView)).setText("Unchecked"); 
     } 
    } 
} 
+0

Отредактировано ... спасибо. – Stephanie

+0

Хм ... если я это сделаю, тогда я не смогу использовать их в onCheckBoxClicked. Они выходят за рамки. – Stephanie

+0

Исправлена ​​основная программа для создания экземпляра в onCreate - основная программа работает отлично. Тест JUnit завершился неудачей с вышеупомянутым исключением NullPointerException.(Я чувствую, что мы собираемся в кругах здесь :) :) – Stephanie

Смежные вопросы