2013-04-06 3 views
1

Linux에서 Android 용 UIAutomator 라이브러리를 사용하여 테스트를 실행하는 데 문제가 있습니다. 기본 설정은 넥서스 4,이 문제의 JDK6, 이클립스, 그리고 리눅스 민트 13UIAutomator는 Linux에서 빌드되었을 때 0 테스트를 실행하지만 다른 플랫폼에서는 정상적으로 작동합니다.

루트는 4.2.2과 에뮬레이터입니다 :

INSTRUMENTATION_STATUS: stream= 
Test results for WatcherResultPrinter= 
Time: 0.007 

OK (0 tests) 


INSTRUMENTATION_STATUS_CODE: -1 

이 내가 무엇을 얻을 때 Linux에서 jar 파일을 작성하십시오. Windows 또는 OSX에서 빌드하면 모든 것이 원활하게 작동하는 것 같습니다. 이 특별한 경우에는 '집'버튼을 누르는 테스트가 하나뿐입니다.

다른 환경 (osx/windows)에서 동일한 코드 및 동일한 단계로 프로젝트를 만들면 테스트가 예상대로 실행됩니다.

내 질문은 - 왜 테스트 주자가 플랫폼에서와 달리 Linux에서 항아리를 만들 때 클래스를 찾을 수 없습니까? 내 최고의 추측 지금은 어떻게 든 자바 경로가 제대로 컴파일되지 않을 설정되어 있으므로 jar 파일이 잘못 빌드됩니다. 이클립스에서 테스트를 실행하면 원래 'ClassNotFoundException'을 얻었지만 osx/windows에서는 테스트가 JUnit에서 실행되지만 실패합니다.

나는 이것을 파헤 치면서 컴파일러가 모두 시스템의 다른 부분에서 다른 java 버전을 가리키고 있음을 발견했다. 이 문제를 해결하고 java6jdk의 인스턴스 하나를 제외한 모든 것을 삭제하고 JAVA_HOME, 이클립스 빌드 경로 및 Java 컴파일 경로를 모두 확인하여 동일한 인스턴스를 가리 킵니다.

이 모든 것 후에도 테스트는 계속 진행되는 것처럼 보이지만 테스트 러너는 테스트를 수행 할 수 없습니다. 나는 나의 지식의 끝자락에있다, 어떤 도움이라도 인정 될 것이다!

감사

편집 : 항아리 TVF :

[email protected]:~/workspace/TestOne/bin$ jar tvf testui1.jar 
0 Sun Apr 07 14:23:24 PDT 2013 META-INF/ 
103 Sun Apr 07 14:23:22 PDT 2013 META-INF/MANIFEST.MF 
1052 Sun Apr 07 14:23:24 PDT 2013 classes.dex 

코드 : 너무 많은 작업과 노력 후

package com.test; 

import android.util.Log; 

public class FirstTest extends UiAutomatorTestCase { 

    public void thisTest() throws UiObjectNotFoundException { 
     getUiDevice().pressHome(); 
     Log.i("HELP","HELP ME"); 
    } 

} 
+0

jar 파일을 비교 했습니까? –

+0

bit for bit, no - vi에서 열어서 비교해 보았습니다. 적어도 비슷했는지 확인하고, 거기에 약간의 평문이 있었는지, 그들은 올바른 경로를 포함하고있는 것 같았습니다. 그들은 또한 거의 같은 크기였습니다. jar 파일을 비교하는 더 좋은 방법이 있습니까? 내용을 분석하여 포함 된 내용을 확인할 수있는 방법이 있습니까? – Brian

+0

jar 파일의 압축을 풀면 포함 된 파일을 찾을 수 있습니다. 그런 다음 diff (Linux의 명령 행 유틸리티 등)를 사용하여 압축 해제 한 각 파일을 작업 jar 파일에서 압축 해제 된 동일한 파일 이름과 비교할 수 있습니다. 테스트의 이름과 함께 버크가있는 경우에 대비해 테스트 케이스 코드를 게시 할 수 있습니까? – JulianHarty

답변

4

, 내가 문제가 것을보고 당황 해요 테스트 함수의 이름 지정에서. 함수가 'test_'로 시작하면 자동화 프로그램은 테스트를 찾습니다. 'test_'로 시작하지 않으면 무시됩니다.

가!

+0

원래 질문에서 테스트는 Windows 및 OSX에서 작동했지만 실행되지는 않았습니까? 그들은 Linux를 기반으로 구축되었습니다. 당신의 대답에서 나는 운영체제가 전혀 문제가 아니었다 고 생각하고 있습니다. 그리고 당신도 리눅스에서 다른 소스 파일을 가지고 있습니다 - 당신은 당신이보고 한 증상을 가진 이유를 설명 할 것입니다. 참고로 여기에 테스트의 이름을 지정하는 것만으로도 당신이 떠나는 것은 아닙니다. 안드로이드 테스트 러너는 리플렉션 (Java에서)을 사용하여 테스트 할 메소드를 찾습니다. 아마도, JUnit 3 규칙을 확인하기 위해 테스트가 필요하다는 단순한 견해가 있습니다. – JulianHarty

+0

jar 파일의 이름을 변경하거나 크게 변경하면 선택한 대상 폴더에서 uidump.xml을 지워야합니다. 그렇지 않으면 테스트 문제가 발생할 수 있습니다. – JackOrangeLantern