2016-12-27 4 views
1

j2objc를 사용하여 빌드 된 cocoapod를 사용하는 앱에서 작업하고 있습니다. 내가 엑스 코드에 단위 테스트를 실행하려고 할 때 나는 다음과 같은 오류를 참조하십시오j2objc 예외로 인해 유닛 테스트가 실행되지 않습니다

Terminating app due to uncaught exception 'JavaLangArrayStoreException', reason: 'source of type IOSByteArray is not an array' 

나는 자바에서 배열은 목표 C 배열에 완벽하게 매핑되지 않는 것으로 알고 있습니다. 하지만이 예외로 인해 앱이 실행되는 것을 막을 수는 없으므로 단위 테스트 및 UI 테스트에서이를 무시하는 방법이 있습니까?

실패한 코드는 코코아 코드 안에 있으므로 수동 변환을 할 수 있을지 잘 모르겠습니다. 여기에 실패한 것 라인이다 :

return IOSObjectArray_Get(nil_chk([rawType getGenericInterfaces]), i); 
+0

코드를 입력하십시오 – Vyacheslav

답변

0

난 당신의 코드를 모르는 그러나 당신은 목표 - C의 배열 IOSByteArray과 동일한 -THE되지 이해해야합니다!

IOSByteArray을 사용하기 전에 보통의 objc 배열로 변환해야합니다.

사용 중이

- (void)getBytes:(jbyte *)buffer 
      offset:(jint)offset 
      length:(jint)length; 

또는이

- (NSData *)toNSData;

이 방법이 작동합니다.

+0

수정 된 질문을 참조하십시오. IOSByteArray를 변환하는 것이 이상적인 솔루션이지만, 코코아포드 안에 있기 때문에 직접 액세스 할 필요가 없습니다. 또한 예외를 실행하면 앱을 실행할 때 충돌이 발생하지 않으므로이를 무시하는 방법이 있다면 좋을 것입니다. – AdColvin

0

오류가있는 행처럼 보이지 않습니다. 그 오류 메시지는 IOSByteArray가 IOSArray의 하위 클래스 인 which it is이 아니라는 말을하지 못한 System.arraycopy의 메시지입니다. IOSObjectArray는 ArrayStoreException here만을 다른 오류 메시지와 함께 발생시킵니다.

유닛 테스트의 소스가 있습니까? 그렇다면 프로젝트 또는 소스 프로젝트의 프로젝트 (오픈 소스 인 경우)를 게시 할 수 있습니까? 실패한 테스트가있는 file a j2objc issue 인 경우 수정 된 즉시 알림을 받게됩니다.

JUnit 테스트 인 경우 Java에서와 같이 실패한 행을 try/catch 블록으로 묶을 수 있습니다. 또는 주석으로 처리하십시오. ;-)