Unity - unit test 붙이기 회고
유니티에도 TestRunner가 있어서, 단위테스트를 해볼 수 있다고 한다.
팀 단위로 적용시켜보고 싶었지만, 참여중인 프로젝트 사이클이 현재 중-후반부에 있기도 하고.. 테스트가 중요시되는 분위기가 아니라서.
이번에는 내가 담당하고있는 UI부분에만 간단하게 유닛테스트정도를 붙여보기로 했다.
1. 사전작업
투입된 시기에 이미 어느 정도 스트럭쳐가 짜여있는 상태였기 때문에 테스트폴더에 어셈블리를 참조하기 조금 빡센 상황이었다.
특히 패키지 / 유틸리티 / 커스텀 유틸리티 스크립트가 여기저기 흩어져있는 상황인데다, 2019>2020 버전업을 하면서 참조가 애매하게 꼬여버린건지 vs에서 자동으로 생성해주는 asmdef파일에 몇몇 폴더가 누락되는 현상이 있었다. (덕분에 유니티에서는 분명 실행이 되는데, vs에서는 참조를 찾을 수 없는데다 reImport로도 해결되지 않는!! 클래스들이 생겼다)
흩어진 패키지/유틸/커스텀 유틸 등을 통합해서 정리하고 싶었지만.. 릴리즈를 3개월 정도 예상하고있는 상황에서 모험을 강행하고싶진 않았고. asmedf를 선언하고 / asmdef reference 로 끊어진 폴더들을 적당히 연결해주었다.
그리고 Test폴더 내 .asmdef 안에는 TESTRUNNER_CUSTOM symbol을 선언해서 playersetting 내에 동 심볼이 선언된 에디터 내에서만 컴파일되도록 했다. (스크립트 내에도 #if 문으로 길게 잡아서 안전장치를 하나 더 두었다 )
2. 진행상황
왜 이런 과정을 거쳐서 테스트 환경을 만들고자 했냐면.. optimized scroll rect 때문이었다. 개인 프로젝트에서 적당히 쓸 때는 군데군데 빵꾸가 있어도 큰 문제 없이 썼는데.. 사내 플젝에다 적용해보면서 예상치 못했던 여러 이슈가 있었다는걸 깨달았기 때문이다.
이미 두군데 정도 적용이 된 상태였고, 장기적으로 기존의 scrollRect를 교체하고자 계획하고있었기 때문에.. 지금에라도 유닛테스트를 붙여야겠다고 생각했고. 붙였다
UI를 위한 유닛테스트를 짤 때 고민이었던 지점은, 프리팹을 나와 디자이너분이 함께 공유하기 때문에 프리팹에서 내가 지정한 오브젝트 이름/하이라키가 의도하지 않은 타이밍에 수정될 수 있다는 부분이었다.
따라서 이후로도 유효한 유닛 테스트가 되기 위해서는 이름이 수정되거나 부모/자식 관계가 변하더라도 유연하게 타겟을 잡아서 테스트를 수행할 수 있는 코드가 필요했고.
큰 영역에서 컴포넌트를 일괄적으로 뽑아온 뒤, 패턴과 일치하는 타겟을 살짝 느슨하게 선택해서 가져오는 방식을 선택했다(대상을 특정한 이후는 여타 유닛 테스트와 동일).
3. 기대요소
여기저기 재사용하고있는 커스텀 UI 컴포넌트들이 꽤 있는데.. 여기에도 확장해서 리팩토링 할 때를 위한 최소한의 안전장치를 만들고자 한다.
'DevLog' 카테고리의 다른 글
Unity - Playfab Event Log 붙이기 회고 (0) | 2022.08.27 |
---|---|
일하고싶은 곳이라고 생각하는 기준 여섯가지 (0) | 2022.08.13 |
잘하는 개발자? (0) | 2022.08.09 |
Unity - 데이터 관리 함수의 유닛테스트 회고 (0) | 2022.07.27 |
입사 6개월차 회고 (0) | 2022.07.13 |