85 lines
2.4 KiB
Plaintext
85 lines
2.4 KiB
Plaintext
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.
|
||
|
||
[quote, JUnit5 User Guide]
|
||
____
|
||
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.
|
||
____
|
||
|
||
=== 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 https://rules.sonarsource.com/java/RSPEC-5810/[S5810].
|
||
|
||
== How to fix it
|
||
|
||
You can simply change the visibility by removing the `public` or `protected` keywords.
|
||
|
||
=== Code examples
|
||
|
||
==== Noncompliant code example
|
||
|
||
[source,java,diff-id=1,diff-type=noncompliant]
|
||
----
|
||
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
|
||
|
||
[source,java,diff-id=1,diff-type=compliant]
|
||
----
|
||
import org.junit.jupiter.api.Test;
|
||
|
||
class MyClassTest {
|
||
@Test
|
||
void test() {
|
||
// ...
|
||
}
|
||
}
|
||
----
|
||
|
||
== Resources
|
||
|
||
=== Documentation
|
||
|
||
* https://junit.org/junit5/docs/current/user-guide/#writing-tests-classes-and-methods[JUnit5 User Guide: Test Classes and Methods]
|
||
|
||
ifdef::env-github,rspecator-view[]
|
||
|
||
'''
|
||
== Implementation Specification
|
||
(visible only on this page)
|
||
|
||
=== Message
|
||
|
||
Remove this '[public|protected]' modifier.
|
||
|
||
|
||
=== Highlighting
|
||
|
||
wrong visibility modifier of the test method/class
|
||
|
||
|
||
endif::env-github,rspecator-view[]
|