티스토리 뷰
테스트 코드를 작성하다 보면 기존 convention과 다른 방법으로 코드를 작성하게 될 때가 있다. 그중 메서드명을 한글로 작성하는 것과 snake_case로 작성하는 것이 대표적이다.
이렇게 작성했을 경우 JetBrains 툴에서는 잘못된 코드라고 지적질을 하게 된다. 여기서는 적어도 테스트 코드에서는 이러한 convention을 무시하게 하는 방법을 알아본다.
왜 테스트 메서드명을 한글로 쓰나
먼저 왜 이런 요구가 생기는지 짚고 가자.
// 영문 camelCase
public function testUserCannotWithdrawWhenBalanceIsInsufficient()
// 한글
public function 잔액이_부족하면_출금할_수_없다()
테스트 코드는 실행되는 문서에 가깝다. 나중에 테스트가 실패했을 때 메서드명만 보고 "무엇이 깨졌는지" 즉시 이해할 수 있어야 한다. 한글로 쓰면 그 목적에 훨씬 잘 맞는다.
프로덕션 코드는 영문 컨벤션을 지키되, 테스트 코드에만 예외를 두는 팀이 많은 이유다.
1. snake_case 경고 무시하기
PhpStorm은 메서드명이 camelCase가 아니면 밑줄로 경고를 표시한다.
Settings > Editor > Inspections
→ PHP > Code Style > Method name violates naming convention
→ 해당 항목 체크 해제
전체를 끄는 게 부담스러우면 스코프를 테스트 디렉터리로 한정할 수 있다. 인스펙션 항목 우측의 In All Scopes를 눌러 스코프를 추가한다.
# 스코프 패턴 예시
file:tests//*
이러면 프로덕션 코드에서는 경고가 그대로 뜨고 테스트에서만 무시된다. 이 방식이 가장 깔끔하다.
2. 한글 메서드명 경고(오타 검사) 없애기
한글을 쓰면 맞춤법 검사(Spelling)가 모르는 단어라며 물결 밑줄을 그린다.
Settings > Editor > Inspections
→ Proofreading > Typo
→ Process code 체크 해제
# 또는 한국어 사전 추가
Settings > Editor > Natural Languages > 한국어 활성화
개별 단어만 무시하려면 밑줄 위에서 Alt+Enter → Save to dictionary 를 선택한다.
3. 코드에서 직접 억제하기
IDE 설정을 건드리지 않고 코드에 주석으로 표시하는 방법도 있다. 팀원 전체에게 적용된다는 게 장점이다.
/** @noinspection PhpMethodNamingConventionInspection */
public function 잔액이_부족하면_출금할_수_없다()
{
// ...
}
클래스 전체에 적용하려면 클래스 선언 위에 붙인다.
/**
* @noinspection PhpMethodNamingConventionInspection
* @noinspection SpellCheckingInspection
*/
class WithdrawTest extends TestCase
4. 코드 스타일 규칙 자체를 수정
경고를 끄는 대신 규칙을 바꿀 수도 있다.
Settings > Editor > Code Style > PHP > Code Conversion
→ Naming conventions 탭에서 Method 패턴 수정
정규식을 유니코드 문자까지 허용하도록 바꾸면 한글 메서드명도 정상으로 인식된다.
PHPUnit이라면 attribute를 쓰는 방법도 있다
메서드명을 한글로 바꾸지 않고도 테스트 이름을 한글로 표시할 수 있다.
// PHPUnit 10+ (attribute)
#[Test]
#[TestDox('잔액이 부족하면 출금할 수 없다')]
public function cannotWithdrawWhenBalanceIsInsufficient()
{
// ...
}
// PHPUnit 9 이하 (annotation)
/**
* @test
* @testdox 잔액이 부족하면 출금할 수 없다
*/
public function cannotWithdrawWhenBalanceIsInsufficient()
# 실행
phpunit --testdox
# 출력
Withdraw
✔ 잔액이 부족하면 출금할 수 없다
이 방식은 메서드명은 컨벤션을 지키고 표시만 한글로 한다. IDE 경고도 안 나고 테스트 리포트도 읽기 좋다. 개인적으로는 이쪽을 더 선호한다.
Pest를 쓴다면 애초에 이런 고민이 없다.
it('잔액이 부족하면 출금할 수 없다', function () {
// ...
});
설정을 팀과 공유하기
IDE 설정을 각자 하면 사람마다 환경이 달라진다. PhpStorm은 프로젝트 단위로 설정을 공유할 수 있다.
# 프로젝트에 커밋되는 설정 파일
.idea/inspectionProfiles/Project_Default.xml
.idea/codeStyles/Project.xml
이 두 파일을 gitignore에서 제외하고 커밋하면 팀원 전체가 같은 인스펙션·스타일 설정을 쓰게 된다. .idea 전체를 무시하되 이 파일들만 예외로 두는 방식이 일반적이다.
# .gitignore
.idea/*
!.idea/codeStyles/
!.idea/inspectionProfiles/
정리
- 메서드명 경고는
Method name violates naming convention인스펙션 - 전체를 끄지 말고 스코프를
tests//*로 한정 - 한글 밑줄은
Typo인스펙션의Process code해제 - 코드에
@noinspection주석으로 개별 억제 가능 - 메서드명은 영문, 표시만 한글로 하려면
@testdox또는#[TestDox] - 인스펙션 설정은
.idea/inspectionProfiles커밋으로 팀 공유
'개발' 카테고리의 다른 글
| 헷갈리는 오름차순 내림차순 (ASC, DESC) 평생 안 잊는 방법 (0) | 2022.09.02 |
|---|---|
| 깃 alias (0) | 2021.11.16 |
| The Tweleve Factor APP ( 12 Factor ) (0) | 2021.03.19 |
| nGrinder 란 무엇인가 ? (사용 후기) (0) | 2020.12.29 |
| 초기설정 (0) | 2020.12.07 |
