테스트 생성
테스트 설정은 레벨에 Functional Test (기능 테스트) 액터를 배치하면 됩니다. 그런 다음 그 액터에 레벨 블루프린트 의 레벨 스크립트 로 테스트 세트를 실행하는 스크립트를 작성합니다. 테스트 자체는 기능 테스트 액터 안에 (자손 블루프린트 클래스 또는 블루프린트로) 만들어 넣거나 레벨 스크립트에서 직접 조립할 수 있습니다.
자리표시자 기능 테스트를 실행하는 레벨 블루프린트.
기능 테스트 클래스 피처
Functional Test (기능 테스트) 클래스가 제공하는 중요 함수는 다음과 같습니다.
| 함수 이름 | 설명 |
|---|---|
PrepareTest |
코드 또는 블루프린트 자손 클래스에서 오버라이드할 수 있습니다. 이 함수는 OnTestPrepare 델리게이트와 함께 처음 실행되며, 오버라이드를 통해 테스트에 필요한 초기 설정을 할 수 있습니다. 이 설정에 여러 프레임이 필요한 경우, 예를 들면 스트리밍 데이터를 레벨에 로드하거나, 경로 데이터를 빌드하거나, 서버에 접속하거나 하는 경우, 이 함수로 그 프로세스를 시작해야 합니다. |
IsReady |
PrepareTest 첫 호출 이후 OnTestStart 를 실행할 때까지 매 틱마다 호출되는 함수입니다. 기본적으로 이 함수는 true 를 반환하며, OnTestStarted 를 즉시 호출할 수 있도록 허용합니다. PrepareTest 로 설정한 초기화 프로세스가 불완전하다면, 이 함수는 false 를 반환하여 메인 테스트 코드가 미숙한 상태로 시작하는 것을 막아야 합니다. |
OnTestStart |
이 델리게이트는 Functional Testing Manager (기능 테스팅 매니저)가 테스트를 시작할 때 호출됩니다. 테스트 함수 기능에 바인딩하고 마지막에 FinishTest 호출하면 됩니다. |
OnTestFinished |
테스트가 끝나면 이 델리게이트가 호출됩니다. 테스트는 종종 후속 테스트에 영향을 주는 방식으로 레벨 내 액터나 레벨에 영향을 주므로, 이 기회에 정리(clean up)하는 것이 사용 가능한 테스팅 환경을 유지하는 데 매우 중요합니다. |
Functional Test 클래스는 다음과 같은 기능도 지원합니다.
| 함수 또는 프로퍼티 이름 | 설명 |
|---|---|
OnAdditionalTestFinishedMessageRequest |
OnAdditionalTestFinishedMessageRequest 를 구현하면 테스트 요약 로그에 정보를 추가하는 방법으로 유용합니다. |
RegisterAutoDestroyActor |
이 함수에 전달한 액터는 테스트가 끝나면 자동 소멸됩니다. 테스트의 일부로 스폰된 액터를 정리하는 좋은 방법입니다. |
LogMessage |
출력 로그 의 LogFunctionalTest 카테고리에 제공한 텍스트를 출력하는 함수입니다. 원래 의도는 테스트 실행 동안 진행 상황을 기록하기 위해서입니다. |
| Observation Point | 액터를 이 프로퍼티에 할당하면, 테스트 시작 시 이 위치로 플레이어를 이동하고 회전합니다. |
| Enabled | 이 변수를 false 로 설정하면 테스트를 비활성화합니다. |
레벨 스크립트를 통한 테스트
레벨 스크립트에서 기능 테스트를 실행하려면, 먼저 레벨에 Functional Test (기능 테스트) 액터를 배치합니다. 기능 테스트를 선택한 채 레벨 스크립트를 열고 OnTestStart 델리게리트와 기능 테스트로의 레퍼런스를 배치합니다. 기능 테스트의 핀을 끌어 놓아 FinishTest 노드를 하나 이상 만들 수 있습니다. 이 시점에서 테스트를 빌드하여 OnTestStart 델리게이트가 FinishTest 노드(들)에 연결되도록 합니다. 정리가 필요한 작업을 하는 테스트의 경우 OnTestFinished 함수도 생성해야 할 수 있습니다. 이 설정이 끝나면 Automation System (자동화 시스템)에서 이 테스트를 올바르게 실행할 수 있습니다. 이 방법은 간단한 테스트, 일반적으로 설정이 거의 필요 없는 테스트에 적합하며, 여러 번 또는 여러 레벨에서 실행하지 않아도 됩니다.
레벨 스크립트에 (기능 테스트 액터와 같은) 액터로의 레퍼런스 또는 이벤트를 추가하려면, 그 액터를 레벨 에디터 또는 월드 아웃라이너 에서 선택한 상태여야 합니다.
자손 클래스 메서드를 통한 테스트
기능 테스트에 보다 복잡한 설정이 필요하거나 (단일 레벨에서, 아니면 여러 레벨에서) 여러 번 실행해야 하는 경우, AFunctionalTest 오버라이드를 권장합니다. 코드나 블루프린트에서 기본 Functional Test 클래스를 확장하면 PrepareTest 및 IsReady 함수를 사용할 수 있는데, 복잡 또는 내부 종속성이 있는 테스트나 설정 시간이 여러 프레임인 테스트를 실행할 때 중요합니다. 레벨 스크립트를 통한 이러한 테스트의 구현은 이전과 동일하지만 테스트 스크립트의 대다수가 레벨 스크립트가 아닌 새로운 기능 테스트 클래스 자체에 포함될 수 있으므로 여러 레벨에서 한 번, 또는 같은 레벨에서 여러 번 쉽게 테스트할 수 있습니다.
예상 테스트 결과 생성 및 사용
어떤 테스트 결과는 크고 복잡하고 정교하거나 수동 작성한 솔루션에 적합하지 않을 수 있습니다. 이와 같은 경우 일반적으로 단일 테스트를 실행하고, 결과가 올바른지 개인적으로 확인한 다음, 결과를 저장하여 향후 테스트 결과와 비교할 수 있습니다. 이는 Functional Testing Editor (기능 테스팅 에디터) 플러그인에 Ground Truth Data (실측 기반 데이터)라는 개념으로 구현되었습니다.
기능 테스트 에디터 플러그인을 활성화해야 실측 기반 데이터를 사용할 수 있습니다.
UGroundTruthData 클래스에 구현된 실측 기반 데이터 개념은 결과를 저장하고 비교하는 데 사용됩니다. 실측 기반 데이터 오브젝트는 선택한 오브젝트를 앞으로 하려는 테스트의 "올바른" 결과로 저장합니다. 그리고 이 오브젝트를 라이브 시뮬레이션에서 해당 오브젝트와 원하는 방식으로 비교할 수 있습니다. 그런 다음 로직으로 테스트 통과 또는 실패 여부를 결정할 수 있습니다. 예를 들어, 골프 게임처럼 정교하고 신뢰할 수 있는 물리 시뮬레이션이 필요한 경우, 시뮬레이션 플레이어가 홀인원을 치는 테스트가 있을 수 있습니다. 실측 기반 데이터에 골프 공을 오브젝트로 포함하고, 라이브 시뮬레이션의 골프 공 위치를 기존에 저장한 (즉 구멍에 들어간) 위치와 비교하여, 오차를 아주 조금만 허용하면 실패 없이 테스트할 수 있습니다. 이런 테스트는 다음과 같이 설계할 수 있습니다.
- 특정 위치와 초기 속도로 "테스트" 골프 공을 스폰합니다. 일정한 여행 시간을 줍니다. 이 시점에서 골프 공은 이상적인 위치에 있을 것입니다. 이제 이 테스트의 실측 기반 데이터에서 골프 공의 "올바른" 위치 로드를 시도할 수 있습니다.
- 실측 기반 데이터가 허용되는 오브젝트를 반환하지 않는 (예를 들어 반환된 오브젝트가 null 또는 잘못된 클래스인) 경우, 생성한 테스트 골프 공을 실측 기반 데이터에 예상 결과로 저장합니다. 골프 공이 있어야 할 곳에 착지하지 못한 경우, 실측 기반 데이터는 블루프린트에서 그
ResetGroundTruth변수를false설정하여 언제든 수동 리셋할 수 있습니다.블루프린트 에디터에서
ResetGroundTruth박스를 체크하면 바로 체크가 해제되지만 데이터는 리셋됩니다.
- 실측 기반 데이터가 원하는 클래스로 변환할 수 있는 오브젝트를 반환한 경우 (이 예에서는 Actor 면 충분), 그 오브젝트와 테스트 골프 공을 비교하여 테스트 통과 여부를 평가할 수 있습니다.
이 테스트는 이동 시간이 4초인 "테스트 골프 공"의 일관된 위치를 확인합니다.
이런 식으로 설정한 테스트는 같은 스크립트로 테스트를 실행하고 예상 테스트 결과를 설정할 수 있습니다. 예상 테스트 결과는 에디터에서 실측 기반 데이터를 편집하여 리셋시킬 수 있습니다.