맨위로가기

JUnit

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

JUnit은 자바 프로그래밍 언어의 단위 테스트 프레임워크로, 1997년 켄트 백과 에리히 감마에 의해 개발되었다. JUnit은 테스트 작성을 간편하게 하고, 테스트 코드를 재사용하며, 개발 효율성을 높이는 데 기여한다. JUnit 3, 4, 5 버전이 있으며, JUnit 4부터는 어노테이션을 사용하여 테스트 코드를 작성하는 것이 가능해졌다. JUnit은 사양 변경 시 테스트 코드 재작성의 문제점과 테스트 코드 작성에 시간이 걸린다는 단점을 가지고 있지만, 다양한 도구와의 통합을 통해 이러한 문제점을 보완한다. JUnit은 TestNG, JxUnit, Jakarta Cactus 등 다양한 파생 도구 및 관련 도구에 영향을 주었다.

더 읽어볼만한 페이지

  • 유닛 테스트 프레임워크 - QUnit
    QUnit은 존 레식에 의해 개발된 자바스크립트 유닛 테스트 프레임워크로, jQuery의 유닛 테스트 코드로 시작하여 독립적인 프로젝트가 되었으며, 모듈 및 테스트 정의와 표명 메서드를 통해 테스트를 수행한다.
  • 유닛 테스트 프레임워크 - PHPUnit
    PHPUnit은 PHP 코드를 위한 유닛 테스트 프레임워크로, 코드 오류를 빠르게 발견하고 회귀 버그를 방지하는 데 유용하지만, 원격 코드 실행 취약점과 같은 보안 문제가 존재한다.
  • 이클립스 라이선스 소프트웨어 - Eclipse (소프트웨어)
    이클립스는 IBM에서 개발한 자바 기반의 통합 개발 환경으로, OSGi 서비스 플랫폼을 런타임 아키텍처로 사용하며, 플러그인을 통해 기능을 확장할 수 있고, 이클립스 퍼블릭 라이선스를 따르며, 한국어를 지원한다.
  • 이클립스 라이선스 소프트웨어 - 클로저 (프로그래밍 언어)
    클로저는 리치 히키가 개발한 JVM 기반의 함수형 프로그래밍 언어로, 자바와의 호환성을 특징으로 하며 불변 데이터 구조와 STM을 활용한 동시성 관리, 그리고 REPL 환경, 매크로 시스템 등의 기능을 제공한다.
  • 익스트림 프로그래밍 - 워드 커닝햄
    워드 커닝햄은 미국의 컴퓨터 프로그래머로, 최초의 위키 사이트 WikiWikiWeb을 만들고 기술 부채 개념을 창안했으며, 소프트웨어 개발 방법론 발전에 기여했다.
  • 익스트림 프로그래밍 - 지속적 통합
    지속적 통합(CI)은 개발자들이 코드 변경 사항을 자주 병합하고 자동화된 빌드 및 테스트를 통해 코드 품질을 향상시키는 소프트웨어 개발 방식이다.
JUnit - [IT 관련 정보]에 관한 문서
기본 정보
JUnit 5 배너
JUnit 5 배너
개발자켄트 벡, 에리히 감마, 데이비드 사프, 크리스 바수데반
최신 버전5.10.0
최신 릴리스 날짜2023년 7월 23일
운영 체제크로스 플랫폼
프로그래밍 언어자바
장르유닛 테스트 도구
라이선스이클립스 공용 허가서 2.0
웹사이트JUnit 공식 웹사이트
코드
JUnit Jupiterorg.junit.jupiter
JUnitorg.junit
JUnit 프레임워크junit.framework

2. JUnit의 역사

JUnit은 1997년 스몰토크용 유닛 테스트 프레임워크인 SUnit을 기반으로 에리히 감마와 켄트 백을 중심으로 개발되었다.[9]

아파치 앤트나 이클립스 플러그인에서도 사용할 수 있으며, 익스트림 프로그래밍과 같은 애자일 소프트웨어 개발 방법론에서는 테스트를 중시하여 자주 소개된다. 자바 초기부터 테스트 실행 환경을 제공해 왔으며, 자바를 사용하는 시스템 개발에서는 필수적인 요소가 되었다.

자바 이외의 언어용으로는 xUnit이 존재한다.

2. 1. 개발 배경

JUnit은 1997년 스몰토크용 유닛 테스트 프레임워크인 SUnit을 기반으로 에리히 감마와 SUnit 개발자인 켄트 백을 중심으로 개발되었다.[9]

마틴 파울러(Martin Fowler)에 따르면, JUnit의 초기 도입자 중 한 명은 다음과 같이 말했다.[6]

> JUnit는 1997년 애틀랜타에서 열린 OOPSLA로 가는 취리히발 비행기에서 탄생했습니다. 켄트 백(Kent Beck)은 에리히 감마(Erich Gamma)와 함께 비행하고 있었는데, 긴 비행 시간 동안 두 명의 괴짜가 할 수 있는 일이 무엇이 있었겠습니까? 바로 프로그래밍이었죠. JUnit의 첫 번째 버전은 그곳에서 페어 프로그래밍으로 구축되었으며, 테스트 우선 방식으로 진행되었습니다(메타-순환적인 괴짜스러움의 즐거운 형태).

JUnit 3에서는 테스트 픽스처가 `junit.framework.TestCase`를 상속해야 했으며,[8] 테스트 메서드는 'test'로 시작해야 했다.[9] 반면 JUnit 4에서는 테스트 실행 콜백에 대한 어노테이션이 `@BeforeClass`, `@Before`, `@After`, `@AfterClass`였고, JUnit 5에서는 `@BeforeAll`, `@BeforeEach`, `@AfterEach`, `@AfterAll`이다.[5]

JUnit은 단독으로도 동작 가능하지만, 아파치 앤트나 이클립스 플러그인에서도 사용할 수 있다. 익스트림 프로그래밍과 같은 애자일 소프트웨어 개발의 몇몇 개발 방법론에서는 테스트를 중시하며 자주 소개된다. 자바의 초기부터 테스트 실행 환경을 제공해 왔으며, 자바를 사용하는 시스템 개발에서는 필수적인 요소가 되었다.

이전 버전의 JUnit도 여전히 인기가 있으며, JUnit 4는 메이븐 중앙 저장소에서 다른 소프트웨어 구성 요소에 의해 10만 번 이상 사용되고 있다.[7]

자바 이외의 언어용으로는 xUnit이 존재한다.

2. 2. JUnit 4의 등장

JUnit 4는 Java SE 5부터 어노테이션을 사용할 수 있게 되어, 기존의 명명 규칙에 얽매이지 않아 더 편리하게 사용할 수 있게 되었다.[9]

과거에는 테스트 클래스명은 `Test`로 끝나야 했고, 테스트하고 싶은 메서드를 테스트하는 메서드명에는 `test` 접두사를 붙여야 했다. JUnit 4부터는 `TestCase#setUp()`, `TestCase#tearDown()` 메서드를 오버라이드할 필요가 없어졌다. 대신 `setUp()`에 해당하는 메서드에는 `@Before` 어노테이션을, `tearDown()`에 해당하는 메서드에는 `@After` 어노테이션을 붙이는 것으로 충분해졌다. 또한, 메서드에 `@BeforeClass`, `@AfterClass` 어노테이션을 붙여 테스트 클래스 실행 전과 실행 후에 실행하고 싶은 메서드를 만들 수도 있게 되었다.[6]

2. 3. JUnit 5의 등장

마틴 파울러(Martin Fowler)에 따르면, JUnit의 초기 도입자 중 한 명은 다음과 같이 말했다.[6]

JUnit은 1997년 애틀랜타에서 열린 OOPSLA로 가는 취리히발 비행기에서 탄생했습니다. 켄트 백(Kent Beck)은 에리히 감마(Erich Gamma)와 함께 비행하고 있었는데, 긴 비행 시간 동안 두 명의 괴짜가 할 수 있는 일이 무엇이 있었겠습니까? 바로 프로그래밍이었죠. JUnit의 첫 번째 버전은 그곳에서 페어 프로그래밍으로 구축되었으며, 테스트 우선 방식으로 진행되었습니다(메타-순환적인 괴짜스러움의 즐거운 형태).


이전 버전의 JUnit도 여전히 인기가 있으며, JUnit 4는 메이븐 중앙 저장소에서 다른 소프트웨어 구성 요소에 의해 10만 번 이상 사용되고 있다.[7] JUnit 4와 JUnit 5의 차이점은 테스트 실행 콜백에 대한 어노테이션이 JUnit 4에서는 `@BeforeClass`, `@Before`, `@After`, `@AfterClass`였던 반면, JUnit 5에서는 `@BeforeAll`, `@BeforeEach`, `@AfterEach`, `@AfterAll`이라는 것이다.[5] JUnit 3에서는 테스트 픽스처가 `junit.framework.TestCase`를 상속해야 했고,[8] 테스트 메서드는 'test'로 시작해야 했다.[9]

3. JUnit의 특징

1997년 에리히 감마와 켄트 백은 스몰토크용 유닛 테스트 프레임워크인 SUnit을 기반으로 JUnit을 개발하였다.[1] JUnit은 아파치 앤트나 이클립스 플러그인과 함께 사용할 수 있으며, 단독으로도 동작 가능하다.[1]

JUnit은 익스트림 프로그래밍과 같은 애자일 소프트웨어 개발 방법론에서 중요하게 다루어지며, 자바 시스템 개발에서 필수적인 요소로 자리 잡았다.[1] 자바 이외의 언어용으로는 xUnit이 있다.[1]

JUnit의 주요 특징은 다음과 같다:[1]


  • 테스트 코드를 한 번 작성하면 빠르게 테스트할 수 있다.
  • 테스트 코드를 표본으로 활용하여 버그 수정을 쉽게 할 수 있다.
  • 테스트 코드를 통해 사양을 한눈에 파악할 수 있다.
  • 누구나 동일한 테스트를 수행할 수 있다.
  • 독자적인 테스트 코드 작성의 수고를 덜 수 있다.

4. JUnit의 문제점

JUnit은 사양 변경 시마다 테스트 코드를 다시 만들어야 하는 문제점이 있다.[1] 이클립스 등의 통합 개발 환경(IDE)을 사용하면 테스트 코드 재작성으로 인한 수고를 줄일 수 있다.[1] 익스트림 프로그래밍(XP) 등의 테스트 주도 개발에서는 테스트 코드 자체가 사양이라는 생각에 기반하기 때문에 이 문제가 해소되는 경우가 있다.[1]

또한, 테스트 코드 작성에 시간이 걸린다는 문제점도 있다.[1] 이클립스 등의 IDE를 사용하여 테스트 코드 작성을 빠르게 할 수도 있다.[1] "테스트는 기능 테스트이며, 내부 로직의 확인이 아니다"라는 생각에 기반하면 이 문제가 해소되는 경우가 있다.[1]

5. JUnit 4의 새로운 기능

JUnit 테스트 픽스처(test fixture)는 자바 객체이다. 구 버전의 JUnit에서는 픽스처가 `junit.framework.TestCase`를 상속해야 했으나, JUnit 4에서는 더 이상 그럴 필요가 없다.[14] 테스트 메소드는 `@Test` 어노테이션을 통해 어노테이트해야 한다.[15]

JUnit4는 Java SE 5부터 어노테이션을 사용할 수 있게 되어, 기존의 명명 규칙에 얽매이지 않게 되어 더욱 사용하기 편리해졌다. 과거에는 테스트 클래스명은 `Test`로 끝나야 했고, 테스트하고 싶은 메서드를 테스트하는 메서드명에는 `test` 접두사를 붙여야 했다. JUnit4부터는, `TestCase#setUp()`, `TestCase#tearDown()` 메서드를 오버라이드할 필요가 없어지고, 대신에, `setUp()`에 해당하는 메서드에는 `@Before` 어노테이션을 붙이고, `tearDown()`에 해당하는 메서드에는 `@After` 어노테이션을 붙이는 것만으로 충분해졌다. 게다가, 메서드에 `@BeforeClass`, `@AfterClass` 어노테이션을 붙임으로써, 테스트 클래스 실행 전과 실행 후에 실행하고 싶은 메서드를 만들 수도 있게 되었다.

5. 1. JUnit 4에서 사용 가능한 어노테이션

JUnit 4에서는 Java SE 5부터 어노테이션을 사용할 수 있게 되어, 기존의 명명 규칙에 얽매이지 않고 더욱 편리하게 사용할 수 있게 되었다.[14]

과거에는 테스트 클래스명은 `Test`로 끝나야 했고, 테스트하고 싶은 메서드를 테스트하는 메서드명에는 `test` 접두사를 붙여야 했다. JUnit 4부터는 `TestCase#setUp()`, `TestCase#tearDown()` 메서드를 오버라이드할 필요가 없어지고, 대신에 `setUp()`에 해당하는 메서드에는 `@Before` 어노테이션을, `tearDown()`에 해당하는 메서드에는 `@After` 어노테이션을 붙이는 것만으로 충분해졌다. 게다가 메서드에 `@BeforeClass`, `@AfterClass` 어노테이션을 붙임으로써, 테스트 클래스 실행 전과 실행 후에 실행하고 싶은 메서드를 만들 수도 있게 되었다.[15]

JUnit 4에서 사용 가능한 어노테이션은 다음과 같다.

  • `@Test` - 해당 메서드가 테스트 메서드임을 나타낸다. 이 메서드에 테스트를 작성한다. 기존 JUnit에서 메서드 이름이 `test`로 시작하는 메서드와 동일하다.
  • `@Before` - 이 어노테이션이 붙은 메서드는 `@Test` 어노테이션이 붙은 메서드를 실행할 때마다 사전에 실행됨을 의미한다. JUnit 4 이전의 `setup()` 메서드와 동일하다.
  • `@After` - 이 어노테이션이 붙은 메서드는 `@Test` 어노테이션이 붙은 메서드를 실행할 때마다 반드시 나중에 실행됨을 의미한다. JUnit 4 이전의 `tearDown()` 메서드와 동일하다.
  • `@BeforeClass` - 이 어노테이션이 붙은 메서드는 해당 테스트 클래스를 호출하기 전에 실행된다.
  • `@AfterClass` - 이 어노테이션이 붙은 메서드는 해당 테스트 클래스를 호출한 후에 실행된다.

6. JUnit 5의 새로운 기능

JUnit 5는 `@Test` 어노테이션을 사용하여 테스트 메서드를 표시한다.[14] 또한, `@BeforeAll`, `@BeforeEach`, `@AfterEach`, `@AfterAll` 어노테이션을 통해 테스트 실행 전후에 필요한 설정을 할 수 있다.[15]

```java

import org.junit.jupiter.api.*;

public class FoobarTest {

@BeforeAll

public static void setUpClass() throws Exception {

// 모든 테스트 메소드 실행 전에 한 번 실행

}

@BeforeEach

public void setUp() throws Exception {

// 각 테스트 메소드 실행 전에 실행

}

@Test

public void oneThing() {

// 한 가지 기능 테스트

}

@Test

public void anotherThing() {

// 다른 기능 테스트

}

@Test

public void somethingElse() {

// 또 다른 기능 테스트

}

@AfterEach

public void tearDown() throws Exception {

// 각 테스트 메소드 실행 후에 실행

}

@AfterAll

public static void tearDownClass() throws Exception {

// 모든 테스트 메소드 실행 후에 한 번 실행

}

}

6. 1. JUnit 5의 확장 모델

JUnit은 기능보다 확장점을 선호하는 패러다임을 따른다. JUnit 팀은 모든 기능을 JUnit 코어 내에 두는 대신, 개발자가 자신의 관심사를 해결할 수 있는 확장 가능한 방법을 제공하기로 결정했다.

JUnit 4에는 Runner API와 Rule API라는 두 가지 확장 메커니즘이 있다.[1] 그러나 Runner API와 Rule API 모두 몇 가지 단점이 있었다.

Runner API의 주요 제약 사항은 개발자가 특정 수명 주기 단계만 필요하더라도 전체 수명 주기를 구현해야 한다는 것이다.[1] 이는 대부분의 사용 사례에 너무 복잡하고 과도하다.[1] 또 다른 주요 제약 사항은 각 테스트 케이스에 하나의 러너 클래스만 사용되므로 구성할 수 없다는 것이다.[1] 예를 들어, Mockito 및 Parameterized 러너는 동일한 테스트 클래스 내에서 존재할 수 없다.[1]

Rule API의 주요 제약 사항은 테스트의 전체 수명 주기를 제어할 수 없으므로 모든 사용 사례에 사용할 수 없다는 것이다.[1] 테스트 케이스 실행 전후에 무언가가 발생해야 할 때만 적합하다.[1] 또 다른 주요 제약 사항은 클래스 수준 및 메서드 수준 콜백에 대한 규칙을 별도로 만들어야 한다는 것이다.[1]

JUnit 5에서 확장 API는 JUnit Jupiter 엔진 내에서 찾을 수 있다.[2] JUnit 팀은 개발자가 단일 통합 확장 API를 제공하여 테스트 수명 주기의 개별 단계에 연결할 수 있도록 하기를 원했다.[2] 특정 수명 주기 단계에 도달하면 Jupiter 엔진은 해당 단계에 대해 등록된 모든 확장을 호출한다.[2] 개발자는 다음 다섯 가지 주요 확장점에 연결할 수 있다.[2]

  • 테스트 수명 주기 콜백 - 이를 통해 개발자는 테스트 수명 주기의 특정 단계에 연결할 수 있다.[3]
  • 테스트 인스턴스 사후 처리 - 이를 통해 개발자는 TestInstancePostProcessor 인터페이스를 구현하여 테스트 인스턴스 생성 후 연결할 수 있다.[4]
  • 조건부 테스트 실행 - 이를 통해 개발자는 특정 기준을 충족한 후에만 테스트 케이스를 실행할 수 있다.[5]
  • 파라미터 해결 - 이를 통해 개발자는 테스트 메서드 또는 생성자로부터 파라미터를 받은 후 파라미터를 해결할 수 있다.
  • 예외 처리 - 예외 처리에 대한 사용 사례는 예외를 발생시키는 대신 테스트 동작을 변경하는 것이다.[6]

7. JUnit 테스트 픽스처

JUnit 테스트 픽스처(test fixture)는 자바 객체이다. 구 버전의 JUnit의 경우 픽스처는 `junit.framework.TestCase`로부터 상속해야 했으나 JUnit 4의 새 테스트는 이렇게 하지 않는다.[14] 테스트 메소드는 `@Test` 어노테이션을 통해 어노테이트해야 한다.[15]

JUnit의 모든 테스트 클래스는 일반적으로 여러 개의 테스트 케이스를 가지며, 이러한 테스트 케이스는 테스트 생명주기를 따른다. 전체 JUnit 생명주기는 다음 세 가지 주요 단계로 구성된다.

# 설정 단계 - 테스트 인프라를 준비하는 단계이다. 두 가지 수준의 설정이 가능하다.

## 클래스 수준 설정: 데이터베이스 연결과 같이 계산 비용이 많이 드는 객체를 생성하고 재사용하며 부작용을 최소화한다. `@BeforeAll` 어노테이션을 사용하여 구현한다.

## 각 테스트 케이스 실행 전 설정: `@BeforeEach` 어노테이션을 사용한다.

# 테스트 실행 - 테스트를 실행하고 결과를 확인하는 단계이다. 테스트 결과는 테스트 성공 여부를 나타낸다. `@Test` 어노테이션이 사용된다.

# 정리 단계 - 모든 테스트 실행이 완료된 후 시스템은 정리를 수행해야 할 수 있다. 클래스 수준 설정과 유사하게 해당 클래스 수준 정리도 있다.

## 클래스 수준 정리: `@AfterAll` 어노테이션은 클래스 수준 정리를 지원하는 데 사용된다.

## 테스트 실행 후 정리: `@AfterEach` 어노테이션을 사용하여 수행할 수 있다.

JUnit 테스트 픽스처는 자바 객체이다. 테스트 메서드는 `@Test` 어노테이션으로 주석 처리해야 한다. 상황에 따라[4] 각 (또는 모든) 테스트 메서드 전(또는 후)에 실행할 메서드를 `@BeforeEach` (또는 `@AfterEach`) 및 `@BeforeAll` (또는 `@AfterAll`) 어노테이션으로 정의할 수도 있다.[5]

```java

import org.junit.jupiter.api.*;

class FoobarTests {

@BeforeAll

static void setUpClass() throws Exception {

// 첫 번째 테스트 메서드 전에 실행되는 코드

}

@BeforeEach

void setUp() throws Exception {

// 각 테스트 전에 실행되는 코드

}

@Test

void oneThing() {

// 한 가지를 테스트하는 코드

}

@Test

void anotherThing() {

// 다른 것을 테스트하는 코드

}

@Test

void somethingElse() {

// 또 다른 것을 테스트하는 코드

}

@AfterEach

void tearDown() throws Exception {

// 각 테스트 후에 실행되는 코드

}

@AfterAll

static void tearDownClass() throws Exception {

// 마지막 테스트 메서드 후에 실행되는 코드

}

}

8. 다른 도구와의 통합

JUnit 5는 빌드 도구, 통합 개발 환경(IDE), 지속적 통합(CI) 도구 등 다양한 도구와 통합된다.[1] 아파치 앤트나 이클립스 플러그인에서도 사용할 수 있다. 익스트림 프로그래밍과 같은 애자일 소프트웨어 개발 방법론에서는 테스트를 중시하며 자주 소개된다. 자바의 초기부터 테스트 실행 환경을 제공해 왔으며, 자바를 사용하는 시스템 개발에서는 필수적인 요소가 되었다.

자바 이외의 언어용으로는 xUnit이 존재한다.

8. 1. 빌드 도구

JUnit은 널리 사용되는 프로젝트 빌드 도구인 아파치 앤트(Apache Ant), 아파치 메이븐(Apache Maven) 및 Gradle 빌드 도구를 지원한다.[1] 빌드 도구는 프로젝트 빌드 프로세스를 자동화하는 데 필수적이다.[2]

  • '''아파치 앤트(Apache Ant)''': 앤트(Ant)라고도 불리는 이 도구는 가장 다재다능한 빌드 도구 중 하나이며, 위에 언급된 세 가지 빌드 도구 중에서 가장 오랜 역사를 가지고 있다.[3] 앤트는 프로젝트 실행에 필요한 작업을 구성하는 데 사용되는 `build.xml` 파일을 중심으로 한다.[3] 앤트는 또한 의존성 해결을 돕는 아파치 아이비(Apache Ivy)라는 확장 기능을 가지고 있다. 프로젝트 의존성은 `ivy.xml` 파일에 선언할 수 있다. 앤트는 `ivy.xml` 파일에 대한 자바 코드 커버리지 도구 (JaCoCo)를 구성하여 JUnit 5와 통합할 수 있다.[3] 그런 다음 `ivy.xml`은 `java-platform-console` 및 `junit-platform-runner` 종속성을 사용하여 JUnit 5와 통합하도록 구성할 수 있다.[4]
  • '''아파치 메이븐(Apache Maven)''': Ant와 달리, 메이븐(Apache Maven)은 빌드 프로세스에 표준화되고 통합된 접근 방식을 사용한다. 메이븐은 종속성을 관리하기 위해 "설정보다 관례"라는 패러다임을 따른다. 자바 소스 코드("src")는 `src/main/java` 디렉토리에서 찾을 수 있으며, 테스트 파일은 `src/test/java` 디렉토리에서 찾을 수 있다. 메이븐은 모든 자바 프로젝트에 사용할 수 있다. 메이븐은 프로젝트 객체 모델 (POM)을 사용하며, 이는 프로젝트의 빌드 단계를 구성하는 XML 기반 접근 방식이다. `pom.xml` 빌드 파일을 사용하는 최소한의 메이븐은 종속성 목록과 고유한 프로젝트 식별자를 포함해야 한다. 메이븐이 작동하려면 빌드 경로에서 사용할 수 있어야 한다. 메이븐은 JUnit 5 테스트를 위한 즉시 사용 가능한 기능을 지원하는 `jacoco-maven-plugin` 플러그인을 사용하여 JUnit 5와 통합할 수 있다. 이러한 작업을 수행하기 위해 서로 다른 메이븐 골(goal)을 지정할 수 있다.
  • '''Gradle''': Gradle은 이전 빌드 도구인 Ant와 Maven의 많은 개념을 차용한 빌드 도구이다.[5] Gradle은 프로젝트 빌드에 필요한 단계를 선언하기 위해 `build.gradle` 파일을 사용한다.[5] XML 기반인 Ant와 Maven과 달리 Gradle은 Java 기반 프로그래밍 언어인 아파치 Groovy를 사용해야 한다.[5] Ant와 Maven과 달리 Gradle은 XML을 사용할 필요가 없다.[5] Gradle은 여전히 Maven의 "구성보다 관례" 접근 방식을 따르며, `src/main/java` 및 `src/test/java` 디렉토리에 대해 동일한 구조를 따른다.[5] Gradle은 빌드 파일에서 JUnit 5 팀이 제공하는 junit-platform 플러그인과 함께 `jacoco` 플러그인을 구성하여 JUnit 5와 통합할 수 있다.[6]

9. 다른 프로그래밍 언어 지원

프로그래밍 언어프레임워크URL
액션스크립트FlexUnit[http://www.flexunit.org/ FlexUnit]
에이다AUnit[http://libre.adacore.com/libre/tools/aunit/ AUnit]
CCUnit[http://cunit.sourceforge.net/ CUnit]
C#NUnit
C++CPPUnit, CxxTest[http://cxxtest.com/ CxxTest]
어도비 콜드퓨전MXUnit
델파이DUnit
얼랭EUnit[http://www.erlang.org/doc/apps/eunit/chapter.html EUnit]
에펠Auto-Test[https://docs.eiffel.com/book/eiffelstudio/using-autotest Auto-Test]
포트란fUnit, pFUnit
프리 파스칼FPCUnit[http://camelos.sourceforge.net/fpcUnit.html FPCUnit]
GolangGo JUnit report[https://github.com/jstemmer/go-junit-report Go JUnit report]
하스켈HUnit[http://hackage.haskell.org/package/HUnit HUnit]
자바스크립트JSUnit[https://jasmine.github.io/ JSUnit]
마이크로소프트 닷넷NUnit
오브젝티브-COCUnit[https://web.archive.org/web/20111013123951/http://www.sente.ch/software/ocunit/ OCUnit]
OCamlOUnit[http://ounit.forge.ocamlcore.org OUnit]
Test::Class, Test::Unit[http://metacpan.org/module/Test::Class Test::Class], [http://metacpan.org/module/Test::Unit Test::Unit]
PHPPHPUnit
파이썬PyUnit, junit-xml[https://pypi.org/project/junit-xml/ junit-xml]
QtQTestLib
RRUnit[http://RUnit.sourceforge.net/ RUnit]
루비JUnit for Rspec[https://github.com/sj26/rspec_junit_formatter JUnit for Rspec]


10. JUnit 파생 도구 및 관련 도구

1997년 스몰토크용 유닛 테스트 프레임워크인 SUnit을 기반으로 에리히 감마와 SUnit 개발자인 켄트 백을 중심으로 개발되었다.[10]

자바 이외의 언어용으로는 xUnit이 존재한다. JUnit에서 파생된 도구는 다음과 같다.


  • TestNG - 'Test the Next Generation'의 약자로 여겨진다. Java SE 5부터 추가된 애노테이션을 이용하여 클래스나 메서드에 Test/test라고 명명할 필요가 없어졌다. JUnit4에서는 마찬가지로 명명 규칙이 완화되었다. 그 외에도 JUnit4에서는 사용할 수 없는 기능이 추가되었다.
  • JxUnit - JUnit은 private 메서드를 테스트할 수 없지만 JxUnit은 테스트가 가능하다. 내부적으로 리플렉션을 이용한다.
  • Jakarta Cactus - 서블릿의 단위 테스트뿐만 아니라 통합 테스트를 실행할 수 있다.
  • Mock 객체 - 테스트용으로 객체를 위장한다.
  • djUnit - JUnit의 테스트를 그대로 실행할 수 있으며, 커버리지 보고서 출력이 가능하다.

참조

[1] 웹사이트 JUnit Releases https://github.com/j[...] 2023-07-23
[2] 웹사이트 Change license to EPL v2.0 https://github.com/j[...] 2017-09-07
[3] 웹사이트 We Analyzed 30,000 GitHub Projects – Here Are The Top 100 Libraries in Java, JS and Ruby http://www.takipiblo[...] 2014-02-09
[4] 웹사이트 Expensive Setup Smell http://c2.com/cgi/wi[...] C2 Wiki 2011-11-28
[5] 웹사이트 Writing Tests https://junit.org/ju[...] 2021-02-04
[6] 웹사이트 bliki: Xunit https://martinfowler[...] 2022-03-07
[7] 웹사이트 JUnit https://mvnrepositor[...] 2021-10-29
[8] 웹사이트 JUnit Cookbook http://junit.sourcef[...] junit.sourceforge.net 2011-05-21
[9] 웹사이트 Migrating from JUnit 3 to JUnit 4: Nothing But Good News https://objectcomput[...] Object Computing, Inc. 2007-08
[10] 문서 コード品質を追求する: JUnit 4 対 TestNG 大規模なテストでは TestNG のほうが優れたフレームワークになる理由 http://www.ibm.com/d[...]
[11] 웹인용 JUnit Releases https://github.com/j[...] 2022-09-22
[12] 웹인용 Relicense JUnit from CPL to EPL https://github.com/j[...] Philippe Marschall 2013-05-18
[13] 웹인용 We Analyzed 30,000 GitHub Projects – Here Are The Top 100 Libraries in Java, JS and Ruby http://www.takipiblo[...] 2019-04-17
[14] 웹인용 JUnit Cookbook http://junit.sourcef[...] junit.sourceforge.net
[15] 웹인용 Expensive Setup Smell http://c2.com/cgi/wi[...] C2 Wiki



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com