2015-01-30 2 views
4

단위 테스트에서 라이브러리 모듈의 메소드를 호출하려는 코드 행에서 Android Studio의 내 Activity/instrumentation 테스트를 실행할 때 NoSuchMethodError이 표시됩니다. 거래는 여기에 무엇Android Instrumentation 테스트에서 라이브러리 프로젝트의 클래스를 찾지 못했습니다.

public class MainActivityTest extends ActivityInstrumentationTestCase2 { 
    public void testMainActivity() { 
     final MainActivity target = (MainActivity) getActivity(); 
     MyLibarary.someStaticMethod(); // yields java.lang.NoSuchMethodError 
} 

:

그래서이 내 시험입니까? 내 라이브러리를 build.gradle의 "compile"의존성으로 정의 했으니 괜찮습니다. 라이브러리는 문제없이 메인 앱 클래스에서도 호출됩니다. 실패한 테스트에서 호출 할 때만입니다. 내 응용 프로그램과 내 테스트는 동일한 모듈에 있습니다.

정리 작업, assembleDebug 및 assembleDebugTest 작업을 수동으로 실행 해 보았습니다. 아무 소용이 없습니다.

프로젝트 구조 :

Root 
|---MyApp 
|  |---src/main/... 
|  |---src/androidTest/... 
|----MyLibrary 

안드로이드 스튜디오 V1.0.2 Gradle을이 AS 기본값의 실행/디버그 구성에서 모듈에 "안드로이드 테스트" "MyApp를"로 실행 도구 v1.0.0 개발자 를 구축 실행 계측 테스트 주자.

+1

Eclipse에서 >> 프로젝트 속성 >> Android >> 테스트중인 프로젝트가 라이브러리에서 참조되는지 확인하십시오. '라이브러리입니다'는 체크하지 않은 상태로 유지 될 수 있습니다 –

+0

정말 그 중 하나의 이름이 아닙니다 - 나는 코드를 익명으로 처리했습니다. 하지만 그건 문제가 아닙니다. 구문 오류가 있으면 코드가 컴파일되지 않습니다. 그것은 컴파일하지만 런타임에 실패 – Nilzor

+0

죄송합니다. 응답하는 동안 내 의견을 편집했습니다. 주제에 대한 대부분의 게시물에 따르면 컴파일 중 한 번은 런타임 중에 라이브러리의 두 버전을 찾고 있습니다. –

답변

7

했다하는 데 도움이됩니다. 키워드 : proguard는을 축소합니다. 지금까지 새로 구현 된 메소드 이 계측 테스트에서 사용되었으므로 proguard는 사용법을 고려하지 않았으므로 proguardDebugTest 빌드 단계에서 DEX에서 제거했습니다.

해결 방법 : 디버그 빌드 (축소 형 : android.buildTypes.debug.minifyEnabled false)에서 축소를 사용하지 않거나 기본 앱에서 방법을 사용하십시오.

+0

아 흥미 롭습니다. instrumentationTestCase와 관련이없는 문제를 일으키는 메서드를 해제하지 않았습니다. 좋은 캐치! – user2511882

1

Gradle으로 최신 정보가 아닙니다. 하지만 계측 테스트를 작성하려는 경우 build.gradletestCompile 또는 종속성을 지정해야한다고 생각합니다.

유용한 링크 :

http://gradle.org/docs/current/userguide/java_plugin.html

Specifying test dependencies with the Gradle Android build system

희망이 좋아 이것 좀 까다로운

+0

junit과 같은 테스트에 대한 종속성 * exlusive *만이 이런 방식으로 지정됩니다. 내 메인 애플 리케이션은 이미 라이브러리에 "컴파일"을 통해 의존하므로, 다시 참조 할 필요가 없다.솔루션은 프로 가드와 관련이 있습니다 - 제 다른 대답을 참조하십시오 – Nilzor

관련 문제