11
votes

I was going through the documentation for junit tests but am unable to understand the need for defining tests as public.Could anyone share some info on this?

I read on https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Test.java

But am still not clear with the reason.

With is I meant why can't I write something as

@Test
private void testAdd(){ }
4

4 Answers

8
votes

The JUnit framework calls your test methods from outside your test class. If your test methods are private, it won't be able to do that.

2
votes

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

Ref. the doc: https://junit.org/junit5/docs/current/user-guide/#writing-tests-classes-and-methods

1
votes

JUnit accesses your test methods by reflection. A SecurityManager can control access to private methods. Hence JUnit uses only public methods and fields for anything that is accessed by the framework.

In short: JUnit would fail to run private test methods if a SecurityManager is active that does not allow access to private methods.

0
votes

try

@Test
public void testAdd(){ }

your testAdd method is private, it won't be able to do that.