테스트 할 간단한 애플리케이션이 있습니다. 여기에는 두 개의 액티비티와 두 개의 버튼이 있습니다. 각 버튼은 다른 액티비티 (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);
}
}
어떤 아이디어 :
내 코드는 여기 (생성자의 어떤 매개 변수는 테스트중인 내 응용 프로그램 등 "디버깅"는 것을 보장 JAR 파일이 올바른 위치에 있는지 확인하기 위해 경로를 구축 체크 없음) 이 시험을 어떻게 달릴 수 있니?
감사합니다, 스테파니
편집 :
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);
}
}
나는 그 이후 실제로 변경하지 않은 것을 (나는 생각하지 않는다) 마지막으로 성공적으로 실행되었습니다.
9 월 12 일 편집 : "solo"객체가 사용 되다가 초기화되었습니다.
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);
}
수정 됨 ... thanks. – Stephanie
흠 ... 그렇게하면 onCheckBoxClicked에서 사용할 수 없습니다. 그들은 범위를 벗어났습니다. – Stephanie
onCreate - main 프로그램에서 인스턴스화 할 주 프로그램이 완벽하게 수정되었습니다. 위의 NullPointerException으로 JUnit 테스트가 실패합니다.(나는 우리가 여기 서클에있는 것처럼 느낍니다. :)) – Stephanie