유닛테스트 코드의 변수명 sut의 정체. SUT - system under test
같은 부서의 개발자 분이 유닛 테스트 코드를 작성하는데 테스트 대상의 변수명으로 sut를 사용하는 것을 보았습니다.
Person이라는 클래스를 테스트한다고 가정하면 Person클래스의 인스턴스 변수명을 sut라고 선언하는 것입니다.
Person sut = PersonFactory.create();
sut가 뭔지 물어보니 xUnit에서 나오는 system under test라는 단어의 약자라고 합니다. xunit patterns사이트에 정의가 있더군요.
AUT, MUT, CUT, OUT 등으로도 불릴 수 있는데요.
- AUT - Application Under Test
- MUT - Method Under Test
- CUT - Class Under Test
- OUT - Object Under Test
의 약자입니다.
클래스니 메서드니 객체니 따로 신경 써서 선언하지 않고 싶다면 대표 격인 SUT를 사용하면 될 거 같습니다.
옆에 있던 다른 개발자는 같은 의미로 target을 사용한다고 하는데요. target을 사용하는 글들도 종종 보입니다.
SUT, AUT, MUT, CUT, OUT 등 xUT는 모두 테스트 대상을 지칭하니 target이 더 직관적인 거 같습니다.
저는 그냥 클래스 명이 Person이라면 그냥 person을 쓰고 있는데요. SUT을 따르면 Person sut가 될 거고요. target을 따르면 Person target이 되겠습니다.
어떤 것이 정답이라고 하기는 어렵고 취향의 차이가 될 거 같습니다.
개인적으로는 sut보다는 target이 좀 더 직관적인 거 같고요. 굳이 target이라고 명시하지 않더라도 테스트 코드를 보면 테스트 대상이 무엇인지는 금방 알 수 있다고 생각하기에 그냥 기본적인 클래스 인스턴스 네이밍(Person이면 person)을 사용해도 괜찮지 않을까 생각됩니다.
1년 뒤의 저는 과연 어떻게 생각하고 있을지 궁금하네요.