이것은 간단한 대답 일 수 있습니다.Android Eclipse jUnit에 수퍼 클래스가 표시되지 않습니다.
1)이 코드를 jar 파일을 만듭니다 : 이것은 넷빈즈를 사용하여 Dex1.jar하는 컴파일
package com.myCompany.base;
public class Dex1 {
public String getTerm1() {
return "Term 1";
}
}
.
2) 이클립스에서 'Hello world'android 응용 프로그램을 만들었습니다. Dex1을 확장하는 Dex2 코드를 추가하십시오. Dex1.jar을 복사하여 java 빌드 경로에 추가하십시오. 내에서 onCreate() 호출에
package com.myCompany;
import com.myCompany.base.Dex1;
public class Dex2 extends Dex1 {
public String getTerm2() {
return getTerm1() + " Term 2";
}
}
:
editText.setText(dex2.getTerm2());
모든 위대한 작품! 나는 안드로이드 화면에 올바른 문자열을 표시합니다. 네!
이제 문제는 시작합니다3) 이클립스 명령 파일을 사용하여 JUnit을 3 테스트 케이스 생성 -> 새 -> 프로젝트 -> 안드로이드 텍스트 프로젝트 명령과 코드를 추가합니다
package com.myCompany.test;
import junit.framework.TestCase;
import com.myCompany.Dex2;
public class Dex2Test extends TestCase {
protected void setUp() throws Exception {
super.setUp();
dex2 = new Dex2();
}
protected void tearDown() throws Exception {
super.tearDown();
}
Dex2 dex2;
public void testGetTerm2() {
/*line 21 */ assertEquals("Term 1 Term 2", dex2.getTerm2());
}
public void testGetTerm1() {
/* line 25 */ assertEquals("Term 1", dex2.getTerm1());
}
}
에를 컴파일러 25 줄 getTerm1()에 대한 '메서드가 정의되지 않은'오류를 제공합니다. 왜 이것이 오류인지 이해할 수 없습니까?
Dex1.jar을 테스트 프로젝트의 java 빌드 경로에 추가하려고 시도했지만 컴파일되지만 런타임 오류 'NoClassDefFoundError'가 표시됩니다. 유치!
추가 정보 16Mar2012
나는 안드로이드를 제거 할 계획 자바 클래스, 같은 jar 파일을 사용하여이를 설정하고는했다. 이것은 내가 안드로이드/DalvikVM (일명 DavrosVM)에 몇 가지 예외가 있어야한다는 결론을 내리게한다.
추가 정보 16Mar2012 끝
내가 뭔가를 잃어버렸나요?
jar 파일이 잘못 작성 되었습니까? 불가능하다고 생각합니까? jar 파일을 잘못 가져 왔습니까?
jar 파일에서 클래스를 가져오고 재정의 할 것을 기대하는 것만 큼 까다로운가요?
읽어 주셔서 감사합니다. 답장을 보내주세요.
물고기
이것은 Android Test Project에서하는 일반적인 방법이 아닙니다. 일반적으로 안드로이드 junit 테스트를 실행하면 실제로 두 개의 apk 파일 (app.apk 및 test.apk)이 설치되어 AVD (또는 실제 장치)에 실행되고, 모두 계측기 테스트 러너가 관리합니다. Dex2는 주 프로젝트에서 정의되고 app.apk에서 처리되며 test.apk 또는 계측기 런타임시 계측기 테스트 클래스의 클래스 로더에서 볼 수 없습니다. 안드로이드 테스트 프로젝트는 안드로이드 구성 요소 (액티비티, 서비스 등)를 테스트하는 데 더 초점을 맞추고 있으며, 메인 프로젝트 내에 정의 된 POJO를 테스트하는 데는 적합하지 않습니다. – yorkw