xUnit 계열(xUnit family)은 JUnit, NUnit, PHPUnit, Test::Unit 같은 단위 테스트 프레임워크를 함께 부르는 이름이다.[1] JUnit은 Java와 JVM(Java Virtual Machine)용 테스트 프레임워크로[2], 단위 테스트 프레임워크의 xUnit 아키텍처를 따르는 한 사례다.[3] NUnit은 .NET 언어 전체를 위한 단위 테스트 프레임워크로, 처음에 JUnit을 옮겨 만들었다.[4] Python의 unittest는 JUnit에서 영감을 받아 만들어졌다.[5]

기원

Kent Beck은 Smalltalk 테스트 프레임워크를 만들었고, 1994년 10월 The Smalltalk Report의 칼럼 “Simple Smalltalk Testing”에서 그 테스트 전략과 프레임워크를 설명했다. 프레임워크는 literate program 꼴로 실었다.[6] SUnit은 Beck의 이 프레임워크에서 시작했고, 처음에는 클래스 4개와 메서드 10개였다.[7] JUnit은 Erich Gamma와 Kent Beck이 처음 만들었다.[3]

공통 구성

JUnit, GoogleTest, Python unittest 같은 프레임워크는 다음 구성 요소를 둔다.

구성 요소하는 일
test case특정 입력에 대한 응답 하나를 검사하는 개별 테스트 단위[5][8]
test suite함께 실행할 테스트를 묶는 단위[5][8]
fixture여러 테스트가 같은 구성으로 쓰는 객체와 데이터. 테스트마다 새로 만들어 테스트끼리 상태를 나누지 않는다.[3][8]
setup, teardown테스트마다 앞에서 fixture를 준비하고 뒤에서 정리하는 루틴[3][8]
assertion결과가 기대와 맞는지 검사하는 문. 실패하면 테스트가 실패한다.[3][8]
test runner테스트 실행을 맡고 결과를 사용자에게 보여 주는 구성 요소[5][9]

C·C++ 프레임워크

  • GoogleTest: Google이 만든 C++ 테스트 프레임워크로, xUnit 아키텍처를 바탕으로 한다.[8]
  • Unity: ThrowTheSwitch.org 프로젝트의 C용 단위 테스트 프레임워크로, 임베디드 소프트웨어를 겨냥하며 C 파일 하나와 헤더 파일 둘로 이루어진다.[10]
  • CppUTest: C와 C++용 xUnit 테스트 프레임워크다. C++로 작성됐지만 C와 C++ 프로젝트에 쓰이고, 임베디드 시스템에서 자주 쓰인다.[11]

Fatal과 non-fatal assertion

GoogleTest의 assertion은 같은 것을 검사하되 실패했을 때 현재 함수에 주는 영향이 다른 짝으로 나온다.[8]

  • fatal assertion(ASSERT_*): 실패하면 fatal failure를 내고 현재 함수에서 곧바로 빠져나간다.
  • non-fatal assertion(EXPECT_*): 실패하면 non-fatal failure를 기록하고 현재 함수를 계속 실행하므로, 한 테스트에서 실패를 여럿 보고할 수 있다.[8]

비교 assertion도 짝으로 나온다. 예를 들어 EXPECT_EQ와 ASSERT_EQ는 val1 == val2를, EXPECT_LT와 ASSERT_LT는 val1 < val2를 검사한다.[12]

[1]
V. Garousi and B. Küçük, “Smells in Software Test Code: A Survey of Knowledge in Industry and Academia,” Journal of Systems and Software, vol. 138, pp. 52–81, 2018, doi: 10.1016/j.jss.2017.12.013.
[2]
JUnit, “JUnit.” 2026. Accessed: Oct. 03, 2026. [Online]. Available: https://junit.org/
[3]
JUnit, “JUnit FAQ.” 2025. Accessed: Oct. 03, 2026. [Online]. Available: https://junit.org/junit4/faq.html
[4]
NUnit, “NUnit.org.” 2026. Accessed: Oct. 03, 2026. [Online]. Available: https://nunit.org/
[5]
“unittest — Unit testing framework,” Python Software Foundation, 2026. Accessed: Oct. 03, 2026. [Online]. Available: https://docs.python.org/3/library/unittest.html
[6]
K. Beck, “Simple Smalltalk Testing,” in Kent Beck’s Guide to Better Smalltalk: A Sorted Collection, Cambridge University Press, 1997, pp. 277–288. doi: 10.1017/CBO9780511574979.033.
[7]
Camp Smalltalk SUnit Project, “Camp Smalltalk SUnit — Manual.” 2006. Accessed: Oct. 03, 2026. [Online]. Available: https://web.archive.org/web/20060204213648/http://sunit.sourceforge.net/manual.htm
[8]
Google, “GoogleTest Primer.” 2026. Accessed: Oct. 03, 2026. [Online]. Available: https://google.github.io/googletest/primer.html
[9]
JUnit, “Test runners (JUnit 4 Wiki).” 2020. Accessed: Oct. 03, 2026. [Online]. Available: https://github.com/junit-team/junit4/wiki/Test-runners
[10]
ThrowTheSwitch.org, “Unity: Unit Testing for C (especially Embedded Software).” 2026. Accessed: Oct. 03, 2026. [Online]. Available: https://www.throwtheswitch.org/unity
[11]
CppUTest, “CppUTest unit testing and mocking framework for C/C++.” 2026. Accessed: Oct. 03, 2026. [Online]. Available: https://cpputest.github.io/
[12]
Google, “GoogleTest Assertions Reference.” 2026. Accessed: Oct. 03, 2026. [Online]. Available: https://google.github.io/googletest/reference/assertions.html