# 2022-07-01

## Tests for Spring Controllers with session attributes

Diffblue Cover now writes tests for Spring Controllers with session attributes, for both the CLI and the IntelliJ plugin. For example:

```

@ContextConfiguration(classes = {MyController.class})

@ExtendWith(SpringExtension.class)

class MyControllerDiffblueTest {
  @Autowired
  private MyController myController;

  @MockBean
  private Plain plain;
  /**
   * Method under test: {@link MyController#doSomethingOnBeanField(List)}
   */
  @Test
  void testDoSomethingOnBeanField() throws Exception {
    // Arrange
    when(plain.doSomething()).thenReturn("Do Something");
    MockHttpServletRequestBuilder getResult = MockMvcRequestBuilders.get("/do-plain");
    MockHttpServletRequestBuilder requestBuilder = getResult.sessionAttr("bandersnatch", new ArrayList<>());

    // Act and Assert
    MockMvcBuilders.standaloneSetup(myController)
        .build()
        .perform(requestBuilder)
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andExpect(MockMvcResultMatchers.content().contentType("text/plain;charset=ISO-8859-1"))
        .andExpect(MockMvcResultMatchers.content().string("Do Something"));
  }
```

## Tests for classes implementing the Builder pattern

Diffblue Cover now recognises that `build` is a **builder method**, i.e. it creates a new object using the fields of the class to call a constructor and returns the result. This means that we can now write tests by calling the `build` method and asserting on its result.

## Coming soon!

We are busy getting ready for IntelliJ 2022.2! More details when the new IntelliJ release is announced, please watch this space.

## Developer Edition trial available

We are delighted to now offer a 14-day trial version of our Developer Edition, which includes the Diffblue Cover CLI, as part of our new licensing option. We're really excited that you can now "try before you buy"! To download your trial of Diffblue Cover Developer Edition, please [click here](https://www.diffblue.com/try-cover?cover_plan_selected=Developer). Full information on all our options is also available [here](https://diffblue.com/pricing).

## How do I automatically maintain all of these tests?

![](https://info.diffblue.com/hubfs/PluginPopup/ci-workflow.gif)

Use Diffblue Cover on any CI platform to automatically update your unit tests and catch regressions for every commit - watch [this video](https://www.diffblue.com/video-demo/?utm_source=Plugin\&utm_medium=Whatsnew\&utm_campaign=WhatsNewBox) to learn more.

## Enhancements

* CLI: Cover now detects testable methods faster. \[Ref: TG-17337]
* Cover now always includes `MethodGroup` failure reasons, if present, in the log file. \[Ref: TG-17121]
* Cover now provides improved guidance when an `R012` (JNI sandbox policy violation) has been encountered. \[Ref: TG-17100]
* Cover now sets `@SessionAttributes` for Spring Controller tests when appropriate. \[Ref: TG-17070]
* Cover is now able to write tests for classes implementing the `Builder` pattern. \[Ref: TG-13577]

## Resolved Issues

* CLI: Resolved an issue which caused Cover to reject prefixes which end in a Java keyword. \[Ref: TG-17358]

## Known Issues

* CLI: The command `dcover clean --failing` does not work on Gradle projects. This command is now deprecated and `dcover validate` should be used instead. \[Ref: TG-11707]
* For multi-module projects, `--coverage-reports` needs to be run in the sub-modules, not from root module with `--working-directory`. \[Ref: TG-16876]


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://cover-docs-preview.diffblue.com/updates-and-upgrades/release-archive/2022-07-01.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
