2012-02-08 3 views
4

Android 계측 테스트를 실행하는 동안 IllegalAccessError가 표시됩니다.
이 로그 캣 출력입니다 :android instrumentation testing : IllegalAccessError

java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 

이 내 설정이다 :
TestProject 테스트 UnderTestProject ('프로젝트'탭에서)를 buildpath에서 AnotherProject을 포함하고 '주문 및 내보내기'탭에서 내 보냅니다. 테스트중인 클래스는 AnotherProject에 속합니다.

나는 빌드 경로 구성을 위해 여기 this stackoverflow question에있는 제안을 따랐다.

빌드는 명령 행에서 Maven을 사용하여 수행됩니다. AnotherProjectTestProjectUnderTestProject의 pom 파일에 종속성으로 있습니다. 이것이 오류를 계속 가져 오는 이유입니까? 이 문제를 어떻게 해결할 수 있습니까? pom에 AnotherProject을 넣고 UnderTestProject에만 넣고 TestProject의 pom에 UnderTestProject을 넣으시겠습니까?

이클립스의 빌드 경로는 메이븐의 pom과 어떻게 다릅니 까?

나는 이것에 대해 명확하지 않으며 모든 도움을 주시면 대단히 감사하겠습니다.

감사합니다.


나는 다음, 여전히 문제가 점점 시도 :

  1. TestProject의 치어에서 AnotherProject을 제거하고에 UnderTestProject을 추가했다.
  2. this thread.에 대한 조언을 따랐습니다 AnotherProject<scope>provided</scope>을 추가하면 내 UnderTestProject도 빌드되지 않습니다.

이 시점에서 고민 중입니다. 출구가 있다면 알려 주시기 바랍니다.

감사합니다.

답변

1

첫째, 라이브러리를 안드로이드 - 받는다는 - 플러그인 위키 페이지 here 섹션에 따라 : 다음

프로젝트 설정이 라이브러리가 포함

경우를들 너무 <을 제공 < 범위 >으로 추가 할 필요가/범위 > 그렇지 않으면 테스트에 추가됩니다. 결과적으로 "예기치 않은 구현으로 해결 된 사전 검증 된 클래스의 클래스 참조"오류가 중복됩니다.

...

참고 버그 # 142, < 포장 > 항아리 </포장 > 만 도서관이 시점에서 작동합니다.enter image description here

이것은 나를 위해 작동, 그것은 도움이되기를 바랍니다 :> 구성 빌드 경로 체크 메이븐 종속성 주문 및 내보내기 탭 -

그런 다음 빌드 경로 클릭 UnderTestProject을 마우스 오른쪽 버튼으로 클릭합니다.

+0

답변 해 주셔서 감사합니다. 나는 지금 Robolectric로 옮기고 시험을 치르고있다. 그러나 계측 테스트를 수행해야하며, 일단 계측에 다시 도달하면이를 확인할 것입니다. 그때까지 당신의 대답을 받아들입니다. – Chaitanya

+7

귀하의 ... 시스템 ... 글꼴 ...은 ... 만화 ... –

1

나는 동일한 문제가있었습니다. 이를 해결하기 위해 메인 애플리케이션의 pom.xml에 라이브러리 의존성을 테스트 애플리케이션의 pom.xml에 추가해야했지만 <scope>provided</scope>을 추가해야했다. 내가 MyApp를 pom.xml 파일을 다음과 같은 의존성이있는 경우

그래서 :

<dependency> 
    <groupId>com.nineoldandroids</groupId> 
    <artifactId>library</artifactId> 
    <version>2.4.0</version> 
    <scope>provided</scope> 
</dependency> 
0

당신은하지 않았다 :

<dependency> 
    <groupId>com.nineoldandroids</groupId> 
    <artifactId>library</artifactId> 
    <version>2.4.0</version> 
</dependency> 

은 내가 MyAppTest의 pom.xml이를 추가했다 이것이 Eclipse 전용 문제인지 또는 프로젝트가 Maven으로 빌드되지 않았는지 (android-maven-plugin 사용) 지정하십시오. 내 경우에는 둘 다 실패합니다. 이유 : UnderTestProject.apk의 전이 종속성은 TestProject.apk으로 바뀌어 pre-verified 클래스 문제를 일으킬 수 있습니다. here을 논의

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>UnderTestProject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <type>apk</type> 
    <exclusions> 
     <exclusion> 
      <groupId>*</groupId> 
      <artifactId>*</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

경고를 생산,이 방법으로 와일드 카드를합니다 사용하지만 (Maven 3.1.1 테스트) 아름다운 일을 가져옵니다 나를 위해이 솔루션은 내 TestProject의 치어이 적용하는 것이었다.