Why is the default access modifier in JUnit 5 package-private?
Tests in JUnit 4 had to be public.
What is the benefit of changing it to package-private?
Why is the default access modifier in JUnit 5 package-private?
Tests in JUnit 4 had to be public.
What is the benefit of changing it to package-private?
                        
                            
                        
                        
                            On
                            
                                                    
                    
                This is JUnit 5 feature which produce a better encapsulation for test classes and methods
Make Jupiter tests package private #679
Test class mostly located in the same package of the class tested:
better way is to place the tests in a separate parallel directory structure with package alignment.
main/ test/ com/ com/ xyz/ xyz/ SomeClass.java SomeClassTests.javaThis approach allows test code to access all the public and package visible members of the classes under test.
It's not the "default". There technically is no default. Rather, in JUnit Jupiter you have a choice:
public,protectedor package-private.The benefit is that you don't have type
publicanymore. If your IDE automatically generates test methods and test classes for you that arepublic, feel free to leave thempublic.But... if you are typing in the methods on your own, then just leave off
publicunless you are designing your test classes for subclassing from other packages, in which case you'd want to make your overrideable test methods eitherpublicorprotected. And of course, interfacedefaultmethods must bepublic.Long story, short: we (the JUnit 5 team) believe in the principle "Less is more", meaning the less you have to type to achieve your goal, the better!