JUnit

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

External

Internal

Overview

Dependencies

dependencies {
    testImplementation "junit:junit:4.12"
}

JUnit and Gradle

The only configuration required to enable unit testing in a Gradle project is to apply the Java plugin and declared JUnit as testImplementation:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    ...
    testImplementation "junit:junit:4.12"
}

This will allow to declare @Test methods and will enable result parsing to generate HTML reports.

Passing System Properties to Tests

See:

Gradle Java Plugin - Passing System Properties to Tests

Concepts

Test Runner

A JUnit plugin that provides custom testing behavior. Specified with @RunWith. JUnit comes with org.junit.runner.Runner, which is an abstract base class that runs tests and notifies of significant events as it does so.

Parameterized Runner

https://junit.org/junit4/javadoc/4.12/org/junit/runners/Parameterized.html

See Parameterized Test below.

Parameterized Test

A parameterized test is characterized by the fact that when it is executed by JUnit, multiple test instances are created and run, based on arbitrary data provided by the test class itself. For each piece of arbitrary data provided by the test class via a method annotated with @Parameters, the JUnit runtime creates a new instance of the test class, and runs all tests methods of that instance. The test instances are constructed with a specifically-declared constructor, which will be injected at runtime with the parameter values. The parameterized tests are run with a Parameterized Runner.

Annotations

Patterns

JUnit XML Reporting File Format

https://llg.cubic.org/docs/junit/

This file format is understood by the Jenkins junit step, which generates Jenkins test reports from it.

<?xml version="1.0" encoding="UTF-8"?>
<!-- If only a single testsuite element is present, the testsuites element can be omitted. 
     All attributes are optional.
-->
<testsuites disabled="" <!-- total number of disabled tests from all testsuites. -->
            errors=""   <!-- total number of tests with error result from all testsuites. -->
            failures="" <!-- total number of failed tests from all testsuites. -->
            name=""
            tests=""    <!-- total number of tests from all testsuites. Some software may expect to only see the number of successful tests from all testsuites though. -->
            time=""     <!-- time in seconds to execute all test suites. -->
	    >

  <!-- testsuite can appear multiple times, if contained in a testsuites element.
       It can also be the root element. -->
  <testsuite name=""      <!-- Full (class) name of the test for non-aggregated testsuite documents.
                               Class name without the package for aggregated testsuites documents. Required -->
	     tests=""     <!-- The total number of tests in the suite, required. -->
	     disabled=""  <!-- the total number of disabled tests in the suite. optional. not supported by maven surefire. -->
             errors=""    <!-- The total number of tests in the suite that errored. An errored test is one that had an unanticipated problem,
                               for example an unchecked throwable; or a problem with the implementation of the test. optional -->
             failures=""  <!-- The total number of tests in the suite that failed. A failure is a test which the code has explicitly failed
                               by using the mechanisms for that purpose. e.g., via an assertEquals. optional -->
             hostname=""  <!-- Host on which the tests were executed. 'localhost' should be used if the hostname cannot be determined. optional. not supported by maven surefire. -->
	     id=""        <!-- Starts at 0 for the first testsuite and is incremented by 1 for each following testsuite. optional. not supported by maven surefire. -->
	     package=""   <!-- Derived from testsuite/@name in the non-aggregated documents. optional. not supported by maven surefire. -->
	     skipped=""   <!-- The total number of skipped tests. optional -->
	     time=""      <!-- Time taken (in seconds) to execute the tests in the suite. optional -->
	     timestamp="" <!-- when the test was executed in ISO 8601 format (2014-01-21T16:17:18). Timezone may not be specified. optional. not supported by maven surefire. -->
	     >

    <!-- Properties (e.g., environment settings) set during test execution.
         The properties element can appear 0 or once. -->
    <properties>
      <!-- property can appear multiple times. The name and value attributres are required. -->
      <property name="" value=""/>
    </properties>

    <!-- testcase can appear multiple times, see /testsuites/testsuite@tests -->
    <testcase name=""       <!-- Name of the test method, required. -->
	      assertions="" <!-- number of assertions in the test case. optional. not supported by maven surefire. -->
	      classname=""  <!-- Full class name for the class the test method is in. required -->
	      status=""     <!-- optional. not supported by maven surefire. -->
	      time=""       <!-- Time taken (in seconds) to execute the test. optional -->
	      >

      <!-- If the test was not executed or failed, you can specify one of the skipped, error or failure elements. -->

      <!-- skipped can appear 0 or once. optional -->
      <skipped message=""   <!-- message/description string why the test case was skipped. optional -->
	  />

      <!-- error indicates that the test errored.
           An errored test had an unanticipated problem.
           For example an unchecked throwable (exception), crash or a problem with the implementation of the test.
           Contains as a text node relevant data for the error, for example a stack trace. optional -->
      <error message="" <!-- The error message. e.g., if a java exception is thrown, the return value of getMessage() -->
	     type=""    <!-- The type of error that occured. e.g., if a java execption is thrown the full class name of the exception. -->
	     >error description</error>

      <!-- failure indicates that the test failed.
           A failure is a condition which the code has explicitly failed by using the mechanisms for that purpose.
           For example via an assertEquals.
           Contains as a text node relevant data for the failure, e.g., a stack trace. optional -->
      <failure message="" <!-- The message specified in the assert. -->
	       type=""    <!-- The type of the assert. -->
	       >failure description</failure>

      <!-- Data that was written to standard out while the test was executed. optional -->
      <system-out>STDOUT text</system-out>

      <!-- Data that was written to standard error while the test was executed. optional -->
      <system-err>STDERR text</system-err>
    </testcase>

    <!-- Data that was written to standard out while the test suite was executed. optional -->
    <system-out>STDOUT text</system-out>
    <!-- Data that was written to standard error while the test suite was executed. optional -->
    <system-err>STDERR text</system-err>
  </testsuite>
</testsuites>

More details:

Jenkins junit step