개발이야기

유닛테스트 코드의 변수명 sut의 정체. SUT - system under test

준호씨 2021. 4. 16. 23:43
반응형

같은 부서의 개발자 분이 유닛 테스트 코드를 작성하는데 테스트 대상의 변수명으로 sut를 사용하는 것을 보았습니다.

Person이라는 클래스를 테스트한다고 가정하면 Person클래스의 인스턴스 변수명을 sut라고 선언하는 것입니다.

Person sut = PersonFactory.create();

 

sut가 뭔지 물어보니 xUnit에서 나오는 system under test라는 단어의 약자라고 합니다. xunit patterns사이트에 정의가 있더군요.

 

SUT at XUnitPatterns.com

SUT Also known as: AUT, MUT, CUT The "system under test". It is short for "whatever thing we are testing" and is always defined from the perspective of the test. When we are writing unit tests the system under test (SUT) is whatever class (a.k.a. CUT), obj

xunitpatterns.com

AUT, MUT, CUT, OUT 등으로도 불릴 수 있는데요.

  • AUT - Application Under Test
  • MUT - Method Under Test
  • CUT - Class Under Test
  • OUT - Object Under Test

의 약자입니다.

클래스니 메서드니 객체니 따로 신경 써서 선언하지 않고 싶다면 대표 격인 SUT를 사용하면 될 거 같습니다.

옆에 있던 다른 개발자는 같은 의미로 target을 사용한다고 하는데요. target을 사용하는 글들도 종종 보입니다.

 

Test Readability: Best of All Worlds

Test Readability: Best of All Worlds When it comes to writing tests, I’ve been on sort of a mild, ongoing quest to increase readability. Generally speaking, I follow a pattern of setup, action, verification in all tests. I’ve seen this called other thi

daedtech.com

 

SUT, AUT, MUT, CUT, OUT 등 xUT는 모두 테스트 대상을 지칭하니 target이 더 직관적인 거 같습니다.

저는 그냥 클래스 명이 Person이라면 그냥 person을 쓰고 있는데요. SUT을 따르면 Person sut가 될 거고요. target을 따르면 Person target이 되겠습니다.

어떤 것이 정답이라고 하기는 어렵고 취향의 차이가 될 거 같습니다.

개인적으로는 sut보다는 target이 좀 더 직관적인 거 같고요. 굳이 target이라고 명시하지 않더라도 테스트 코드를 보면 테스트 대상이 무엇인지는 금방 알 수 있다고 생각하기에 그냥 기본적인 클래스 인스턴스 네이밍(Person이면 person)을 사용해도 괜찮지 않을까 생각됩니다.

1년 뒤의 저는 과연 어떻게 생각하고 있을지 궁금하네요.

반응형