In this section:

Introduction

Unit Test Assistant allows you to create and execute JUnit tests for Spring components: @Controller, @RestController, @Component, @Repository, and @Service. By analyzing code, UTA can generate and preconfigure runnable test templates that contain sample assertions and initial values. When adding tests for Spring components, you can choose to create:

  • Standard JUnit tests
  • Spring framework tests that utilize the Spring test framework and run in a Spring application context (see Spring MVC Test Framework for details)

If you create Spring framework tests, ensure that the spring-test dependency is configured for your build system; see Configuring the Build System to Include Required Libraries.

Support for Spring Framework Tests

UTA supports Spring dependency injection for autowired fields, setter methods, and constructor arguments. It creates an inner configuration class to provide beans to Spring for necessary dependencies. If mocking is enabled (see Configuring Preferences), all dependencies are added as mocked beans.

Tests for Handler Methods in Spring MVC Controllers

Tests created for handler methods in @Controller and @RestController are configured using MockMvc. UTA can recognize and configure settings for request body, response body, response mime types, HTTP method, path parameters, query parameters, HTTP headers and session attributes.

Spring Boot

When you create tests in a Spring Boot project, inner configuration classes are not added.

Creating Spring Tests

To create a Spring test:

  1. Choose Parasoft> Preferences> Unit Test Assistant.
  2. Enable the Spring framework tests> Enable creation actions option.
  3. Select a Spring component in the editor. UTA will analyze your code and display one or more options in the Unit Test Assistant view. The following options may be available:
    - Regular creates a standard JUnit test for the selected method–without using the Spring framework.
    - Regular Spring creates a Spring test for the selected method.
    Parameterized creates parameterized test cases–without using the Spring framework.
    Parameterized Spring creates parameterized Spring test cases for the selected method.
  4. Select one of the available options.
  5. The generated test or tests include sample assertion templates and default UTA values. View the test(s) to uncomment the sample assertions and modify the values.

    Spring tests created with UTA do not include optional parameters. For example, the following parameter will not be included:
    @RequestParam(value = "count", required = false)

  6. Run the test with UTA to collect coverage information and recommendations for possible improvements (see Executing Unit Tests with Unit Test Assistant). To facilitate finding handler method calls in the execution flow tree, most internal Spring calls are hidden.

Creating Spring Tests for Private Methods

UTA allows you to create regular and parameterized Spring tests for private methods to achieve a higher code coverage rate.

  1. Choose Parasoft> Preferences> Unit Test Assistant.
  2. Enable the Spring framework tests> Enable creation actions option.
  3. Enable the Test creation options> Create tests for private methods option.
  4. Select a private Spring component method in the editor.
  5. Choose one of the following options:
    - Click Regular private to create a regular test for the selected private method–without using the Spring framework.
    - Click Regular Spring private to create a regular Spring test for the selected private method.
    - Click Parameterized private to create a parameterized test for the selected private method–without using the Spring framework.
    - Click Parameterized Spring private to create a parameterized Spring test for the selected private method.

By default, the Create tests for private methods option is disabled, since the industry best practice is to test private methods by creating tests for the accessible methods that call them, rather than by creating tests for private methods directly.

Configuring Spring tests with the ContextConfiguration Annotation

A Spring unit test requires the beans to be available when the test is executed to provide necessary dependencies. By default, UTA defines the available beans directly in the test case by creating and populating an inner configuration class with the required Bean methods. (Note: When you create tests in a Spring Boot project, a configuration class is not created, since Spring Boot can automatically scan for dependencies). 

Alternatively, you can configure your Spring tests with the @ContextConfiguration annotation by providing the reference to XML configuration files or separate Java configuration classes.

  1. Choose Parasoft> Preferences> Unit Test Assistant.
  2. Enable the Spring framework tests> Enable creation actions option.
  3. Complete the Default ContextConfiguration attributes field with one of the following:
    -  Reference to one or more XML configuration files. Your configuration attributes may resemble the following:

    locations={"classpath:/**/FirstContext.xml", "classpath:/**/SecondContext.xml"}

    - Reference to one or more separate Java configuration classes. Your configuration attributes may resemble the following:

    classes={FirstConfigClass.class, SecondConfigClass.class}

Example

You can configure the Default ContextConfiguration attribute option with a reference to two XML configuration files:

The generated Spring unit test will include a ContextConfiguration annotation with the configured attributes:

For more details on the ContextConfiguration annotation, see the spring documentation https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html

  • No labels