테스트와 관련해서 chatgpt 와 나눈 대화를 정리한 글이다.
먼저 단위테스트와 통합테스트가 있다.
a기능을 개발해야하는 상황에서 a기능은 1번 데이터 정렬, 2번 정렬된 데이터로 하는 무언가 라고 정의하자.
이때, 1번을 구현해서 먼저 테스트해보는 것을 단위테스트라고 한다.
또 1,2번을 모두 구현하고 한번에 실행했을 때 하는 테스트를 통합테스트라고 한다.
// 1번 작업: 데이터 정렬
std::vector<int> sortData(const std::vector<int>& data) {
std::vector<int> sortedData = data;
std::sort(sortedData.begin(), sortedData.end());
return sortedData;
}
// 2번 작업: 정렬된 데이터를 가지고 어떤 일 수행
int processData(const std::vector<int>& sortedData) {
// 예시로 정렬된 데이터의 합을 구함
int sum = 0;
for (int num : sortedData) {
sum += num;
}
return sum;
}
// 단위 테스트
void testSortData() {
std::vector<int> data = {3, 1, 2};
std::vector<int> expected = {1, 2, 3};
assert(sortData(data) == expected);
}
void testProcessData() {
std::vector<int> sortedData = {1, 2, 3};
int expectedSum = 6;
assert(processData(sortedData) == expectedSum);
}
다음과 같을 때, testSortData는 단위테스트함수이며 testProcessData는 통합테스트함수이다.
assert 함수를 통해 검증한다.
이렇게 테스트케이스를 만들어서 할수도 있지만 수많은 케이스에 대해서 어떻게 동작하는지를 테스트해야한다. 그 때 수작업으로 하기엔 무리가 있다.
그래서 자동화하기 위한 여러 도구들이 존재한다.
1. 코드 커버리지 도구
높은 커버리지를 목표로 하되, 100%를 보장하지 않는다.
ex)jacoco 라는 도구가 있다.
2. 테스트 프레임워크
Google Test, Catch2 등과 같은 C++ 프레임워크를 사용해 볼 수 있다.
3. Mocking 및 Stubbing
의존성있는 모듈이나 함수를 대체하기 위해 mock객체를 사용할 수 있다.
네트워크나 DB같은 제어하기 어려운 환경에서 사용하기 유리하다.
4. continous integration (CI)
Jenkins, Travis CI, GitHub Actions 같은 도구들로 코드를 변경할 때마다 자동으로 테스트를 수행할 수있다.
또한 언리얼 엔진에서도 이러한 테스트기능을 제공한다.
1. FUnrealUnitTestFramework
언리얼 엔진에서 제공하는 단위 테스트 프레임워크입니다. 이 프레임워크를 통해 게임 로직, 컴포넌트, 클래스 등을 테스트할 수 있습니다. 주로 C++ 코드의 단위 테스트를 작성하는 데 사용됩니다.
AutomationTest.h 가 필요하다.
특징:
- 단순하고 직관적인 API를 제공하여 테스트를 쉽게 작성할 수 있습니다.
- AutomationTest.h 헤더를 통해 테스트 케이스를 정의하고 실행할 수 있습니다.
- 테스트 케이스를 그룹화하고, 각 그룹에 대해 다양한 테스트 플래그를 설정할 수 있습니다
2. Automation System
언리얼 엔진에서 제공하는 자동화 테스트 시스템으로, 다양한 테스트를 작성하고 실행할 수 있는 기능을 제공합니다. 단위 테스트, 통합 테스트, 기능 테스트 등 다양한 테스트 유형을 지원하며, 게임 개발 전반에 걸쳐 사용될 수 있습니다
특징:
- 테스트 자동화: 테스트를 자동으로 실행하고 결과를 기록하여 지속적인 통합(Continuous Integration, CI) 환경에서 유용합니다.
- 다양한 테스트 유형: 기능 테스트, 성능 테스트, 렌더링 테스트 등 다양한 유형의 테스트를 작성할 수 있습니다.
- 테스트 관리: 테스트를 그룹화하고, 특정 조건에서만 실행되도록 설정할 수 있습니다.
- 결과 분석: 테스트 실행 결과를 시각적으로 확인하고 분석할 수 있는 도구를 제공합니다.
Automation System 사용법
에디터에서 테스트 실행:
- 언리얼 에디터를 열고 Window -> Developer Tools -> Session Frontend를 선택합니다.
- Automation 탭을 선택하여 사용 가능한 테스트 목록을 확인하고 실행합니다.
'개발 지식' 카테고리의 다른 글
게임에서의 내적 (0) | 2024.07.29 |
---|---|
정규표현식과 예제문제 (2) | 2024.07.23 |
Git 협업을 위한 Branch 정리 (1) | 2024.02.27 |
비트 연산 (0) | 2023.07.28 |
코드 디버깅(debugging) (1) | 2023.07.19 |