2012-03-14 4 views
0

이것은 간단한 대답 일 수 있습니다.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 파일에서 클래스를 가져오고 재정의 할 것을 기대하는 것만 큼 까다로운가요?

읽어 주셔서 감사합니다. 답장을 보내주세요.

물고기

+0

이것은 Android Test Project에서하는 일반적인 방법이 아닙니다. 일반적으로 안드로이드 junit 테스트를 실행하면 실제로 두 개의 apk 파일 (app.apk 및 test.apk)이 설치되어 AVD (또는 실제 장치)에 실행되고, 모두 계측기 테스트 러너가 관리합니다. Dex2는 주 프로젝트에서 정의되고 app.apk에서 처리되며 test.apk 또는 계측기 런타임시 계측기 테스트 클래스의 클래스 로더에서 볼 수 없습니다. 안드로이드 테스트 프로젝트는 안드로이드 구성 요소 (액티비티, 서비스 등)를 테스트하는 데 더 초점을 맞추고 있으며, 메인 프로젝트 내에 정의 된 POJO를 테스트하는 데는 적합하지 않습니다. – yorkw

답변

1

내가 생각 Android Testing: External libraries를 살펴 보자는 문제에 대한 해결책을 가지고 있습니다. 잘못된 작업 일 수 있습니다. Java 빌드 경로에서 라이브러리를 내보내는 중입니다.

+0

Dex2를 jar 라이브러리로 옮기지 않는 한이 방법이 효과가 있을지 의심 스럽다.안드로이드 프로젝트와 안드로이드 테스트 프로젝트 간의 의존성은 코드 레벨에 있지 않습니다 (즉, 안드로이드 프로젝트로부터 클래스를 가져온 다음 테스트 프로젝트 내에서 그 타입의 객체를 처음부터 인스턴스화합니다), 그것은 계기 런타임에서 해결됩니다 테스트 러너가 앱을 실행할 때 인스턴스화됩니다.) 즉, Android Project와 Android Test Project 간의 관계는 컴파일 타임에 바인딩되지 않으며 악기 런타임에 바인딩됩니다. – yorkw

+0

dtMilano, 귀하의 대답은 정확합니다. 고마워, 내가 네 책을 주문 했어. – fishjd

관련 문제