2017-03-27 5 views
1

질문하기 전에이 말을해야합니다. 엑스 코드에서 UI 테스트에 대한 나의 이해 :XCTest의 UI 대상에서 주 대상의 메서드를 호출하는 방법은 무엇입니까?

  • UI 테스트는 단지 UI 작업은
  • 은 원래 소스는 최종 사용자가 액세스 할 수없는 흐름 자동화를위한 것입니다. 마찬가지로, UI 테스트는 앱의 소스 코드에 액세스 할 수 없습니다.
  • UI 테스트 케이스 내에서 요소 속성/식별자 만 액세스 할 수 있습니다.

내 시나리오 :

내 UI 테스트 케이스에서 내 소스 코드 (말 MyVC.h/MyVC.m를) 뷰 컨트롤러 (myMethod() 말) 메서드를 호출합니다.

참고 : 내 소스 코드는 Objective C로 작성되었으며, Swift에 테스트 케이스를 작성하고 있습니다.

제 생각에 UITest 타겟에서도 MyVC.m (대상에 .h를 추가 할 수 없음)을 추가해야합니다. 그렇다면 내 UITest 브리징 파일에 MyVC.h을 가져와야합니다. 그리고이 같은 UITest에서 myMethod()를 호출 할 수

MyVC.myMethod() 

그것은 작동합니다!

문제 : 실시간으로

, 클래스의 대부분은 등을 백분율 클래스, 상수 파일 (헤더 파일), .PCH 파일 공유 관리자에서 가져온 클래스,

를 사용 MyVC이 위와 같은 수업을 사용하지 않는 독립 수업 인 경우 myMethod()에 아무런 문제없이 액세스 할 수 있습니다.

그러나 간접적으로 MyVC이 클래스를 사용하면 UITest를 실행하면 모든 소스 코드에서 누락 된 헤더 파일 오류가 표시됩니다.

내가 뭘하려 :

  • 이 문제를 해결하려면, 나는 UI 대상으로 모든 소스 파일을 추가하여 테스트했습니다. 아직도 그 문제가 발생합니다. 이후 나는 .h 파일을 추가 할 수 없다.
  • 나는 어떤 클래스의 메소드를 호출 할 수있는 유닛 테스트 클래스를 만들었다. (유닛 테스트 클래스는 "호스트 어플리케이션 API 테스트 허용"옵션을 가지고 있기 때문에). 그런 다음 UI 테스트 케이스에서 Unit 테스트 케이스에 액세스하려고했습니다. 여기에도 각 파일에서 동일한 오류가 발생합니다.

질문 :

내가 필요한 모든 파일이 주요 소스의 모든 파일에 헤더를 추가해야합니까?

누구나 이런 유형의 오류가 발생 했습니까? 누구나 UI 테스트에서 DB 액세스를 했습니까?

+1

http://stackoverflow.com/questions/34771278/xcode7-uitesting- main-target-classes-to-be-available-from -uituscas? rq = 1 – Shahid

+0

UI 테스트에서 앱 코드에 액세스하고 싶습니다. 테스트 시나리오는 무엇입니까? –

답변

1

두 가지 :

  • 질문의 후반 빌드 문제를 해결하는 것 같다. 그렇다면 대상의 모든 종속성이 필요합니다.
  • UI 테스트에서 테스트 된 앱에서 메소드를 호출하는 방법에 대해 질문합니다. UI 테스트는 앱과 다른 프로세스에서 실행되므로 앱의 객체에 액세스 할 수 없습니다. 액세스 가능한 UI를 추가하여 대역 내 트리거를 이동하거나 로컬 소켓을 사용하여 수행 할 수있는 사이드 채널을 조작해야합니다.

나는 두 번째 비트가 UI 테스트에서 데이터베이스를 때리는 것에 관한 비트에서 응용 프로그램의 특정 개체가 필요하지 않은 것처럼 들리므로 사용자의 필요에 따라 중요하지 않을 것이라고 생각합니다. 그 클래스는 어떤 이유로 DB에 선언 된 일부 DB 접근 메소드를 얻는다. 이를 위해 클래스에서 컴파일하고 인스턴스화하고 메시지만으로 충분합니다. (DB와 관련된 메소드를 UI가 아닌 클래스로 분해하면 더 쉽게 사용할 수 있습니다.)

+1

@ jeremy-w-sherman UI 테스트에서 로컬 소켓에 대해 공유 할 수있는 예제 나 지식이 있습니까? iOS UI 개발 워크 플로우에 그러한 것을 통합하는 것은 매우 흥미로울 것입니다. –