JUnit5 test classes and methods should generally have package visibility. To fix this issue, change their visibility to the default package visibility.

## Why is this an issue?

JUnit5 is more tolerant regarding the visibility of test classes and methods than JUnit4, which required everything to be `public`. Test classes and methods can have any visibility except `private`. It is however recommended to use the default package visibility to improve readability.

> Test classes, test methods, and lifecycle methods are not required to be `public`, but they must not be `private`.

> It is generally recommended to omit the public modifier for test classes, test methods, and lifecycle methods unless there is a technical reason for doing so – for example, when a test class is extended by a test class in another package. Another technical reason for making classes and methods public is to simplify testing on the module path when using the Java Module System.

— JUnit5 User Guide

### What is the potential impact?

The code will be non-conventional and readability can be slightly affected.

### Exceptions

This rule does not raise an issue when the visibility is set to `private`, because `private` test methods and classes are systematically ignored by JUnit5, without a proper warning. In this case, there is also an impact on reliability and so it is handled by the rule {rule:java:S5810}.

## How to fix it

You can simply change the visibility by removing the `public` or `protected` keywords.

### Code examples

#### Noncompliant code example

    import org.junit.jupiter.api.Test;

    public class MyClassTest { // Noncompliant - modifier can be removed
      @Test
      protected void test() { // Noncompliant - modifier can be removed
        // ...
      }
    }

#### Compliant solution

    import org.junit.jupiter.api.Test;

    class MyClassTest {
      @Test
      void test() {
        // ...
      }
    }

## Resources

### Documentation

- JUnit5 User Guide: Test Classes and Methods