[[overview]]
== Overview

The goal of this document is to provide comprehensive reference documentation for
programmers writing tests, extension authors, and engine authors as well as build tool
and IDE vendors.

ifdef::backend-html5[]
ifdef::linkToPdf[]
This document is also available as a link:{userGuidePdfFileName}[PDF download].
endif::linkToPdf[]
endif::backend-html5[]

[[overview-what-is-junit-5]]
=== What is JUnit 5?

Unlike previous versions of JUnit, JUnit 5 is composed of several different modules from
three different sub-projects.

**JUnit 5 = _JUnit Platform_ + _JUnit Jupiter_ + _JUnit Vintage_**

The **JUnit Platform** serves as a foundation for <<launcher-api,launching testing
frameworks>> on the JVM. It also defines the `{TestEngine}` API for developing a testing
framework that runs on the platform. Furthermore, the platform provides a
<<running-tests-console-launcher,Console Launcher>> to launch the platform from the
command line and the <<junit-platform-suite-engine>> for running a custom test suite using
one or more test engines on the platform. First-class support for the JUnit Platform also
exists in popular IDEs (see <<running-tests-ide-intellij-idea>>,
<<running-tests-ide-eclipse>>, <<running-tests-ide-netbeans>>, and
<<running-tests-ide-vscode>>) and build tools (see <<running-tests-build-gradle>>,
<<running-tests-build-maven>>, and <<running-tests-build-ant>>).

**JUnit Jupiter** is the combination of the <<writing-tests,programming model>> and
<<extensions,extension model>> for writing tests and extensions in JUnit 5. The Jupiter
sub-project provides a `TestEngine` for running Jupiter based tests on the platform.

**JUnit Vintage** provides a `TestEngine` for running JUnit 3 and JUnit 4 based tests on
the platform. It requires JUnit 4.12 or later to be present on the class path or module
path.

[[overview-java-versions]]
=== Supported Java Versions

JUnit 5 requires Java 8 (or higher) at runtime. However, you can still test code that
has been compiled with previous versions of the JDK.

[[overview-getting-help]]
=== Getting Help

Ask JUnit 5 related questions on {StackOverflow} or use the {DiscussionsQA}.

[[overview-getting-started]]
=== Getting Started

[[overview-getting-started-junit-artifacts]]
==== Downloading JUnit Artifacts

To find out what artifacts are available for download and inclusion in your project, refer
to <<dependency-metadata>>. To set up dependency management for your build, refer to
<<running-tests-build>> and the <<overview-getting-started-example-projects>>.

[[overview-getting-started-features]]
==== JUnit 5 Features

To find out what features are available in JUnit 5 and how to use them, read the
corresponding sections of this User Guide, organized by topic.

* <<writing-tests, Writing Tests in JUnit Jupiter>>
* <<migrating-from-junit4, Migrating from JUnit 4 to JUnit Jupiter>>
* <<running-tests>>
* <<extensions, Extension Model for JUnit Jupiter>>
* Advanced Topics
  - <<launcher-api>>
  - <<testkit>>

[[overview-getting-started-example-projects]]
==== Example Projects

To see complete, working examples of projects that you can copy and experiment with, the
{junit-examples-repo}[`junit-examples`] repository is a good place to start. The
`junit-examples` repository hosts a collection of example projects based on JUnit Jupiter,
JUnit Vintage, and other testing frameworks. You'll find appropriate build scripts (e.g.,
`build.gradle`, `pom.xml`, etc.) in the example projects. The links below highlight some
of the combinations you can choose from.

* For Gradle and Java, check out the `{junit-jupiter-starter-gradle}` project.
* For Gradle and Kotlin, check out the `{junit-jupiter-starter-gradle-kotlin}` project.
* For Gradle and Groovy, check out the `{junit-jupiter-starter-gradle-groovy}` project.
* For Maven, check out the `{junit-jupiter-starter-maven}` project.
* For Ant, check out the `{junit-jupiter-starter-ant}` project.
