Re: extension request on org.junit.internal.MethodSorter
David Saff <[email protected]> Wed, 4 Dec 2013 21:02:45 -0500
| Newsgroups | gmane.comp.java.junit.user |
|---|---|
| Message-ID | <CALrw-PzESg+akJk4OTPdMiBVvywBeUCErmE-PzGt4Ns98bHN5g@mail.gmail.com> |
We recently had a similar proposal for filters, which resulted in https://github.com/junit-team/junit/pull/647. I'd be open to a similar solution with Sorters, as a starting point. What do you think? David Saff On Wed, Dec 4, 2013 at 4:22 AM, Ike DuMike <[email protected]> wrote: > > > Hi again David > > Thanks for the quick reply and good suggestion. The idea that I have > of sorting is on three levels. I am working to support more than 10 > commercial products with varying code of bases sizes of 1000-10000 > basic tests and 1000-10000 functional and non-functional test cases > running w/ junit. To add an annotation only, would be a major effort. > > What I would like to have is the following: > > 1) @SortWith / @FixMethodOrder on class level > 2) System.setProperty("org.junit.internal.MethodSorter.sorter", > "NAME_ASCENDING"); // Set from somewhere in "bootloader sequence" of > the test classes. Effect: all Junit test classes sort test methods > according to this setting. Classes that have the sort setting > @SortWith or @FixMethodOrder has precedence over the property > "org.junit.internal.MethodSorter.sorter". > 3) -Dorg.junit.internal.MethodSorter.sorter=NAME_ASCENDING from the > commandline (maven, gradle, ant, eclipse, intellij ...). Variant 1 > and 2 has precedence. However if not set this java -D property decide > sorting behaviour. Value: with this option it is possible to quickly > see test method inter dependency maturity using only a "compile" > directive. > > NAME_ASCENDING is just an example. DEFAULT, JVM, NAME_ASCENDING and > PSEUDO_RANDOM should be possible. > > These features I think would increase the junit user experience. > > Opinions on this? > > - ikedumike > > 2013/12/3, David Saff <[email protected]>: > > > ikedumike, > > > > Thanks for your long use and support! > > > > I think that allowing pseudo-random sorting sounds like a good extension. > > I'd rather not use MethodSorter to do that, however, because it's limited > > to methods in classes, and only for certain runners. For example, it > > wouldn't allow randomizing classes within a suite. MethodSorter was > > created merely to enable a workaround for people who found their > > method-order changing as a result of upgrading from JDK 6 to JDK 7 > > > > There's an existing Sorter abstraction that I think would work well for > > this. One way to make it generally useful might be to make ParentRunner > > recognize a @SortWith annotation that would provide a Sorter, either one > > like this, or any other kind of Sorter. > > > > David Saff > > > > > > On Tue, Dec 3, 2013 at 2:30 PM, <[email protected]> wrote: > > > >> > >> > >> Hi Mathew and David > >> > >> Having used Junit with great pleasure inside the eighth largest software > >> organization in the world during many years I would like to ask you to > >> add > >> an method sorter extension to org.junit.internal.MethodSorter. > >> > >> It looks like: > >> > >> /** > >> * Linear congruential pseudorandom number sort order, with > >> * {@link Random#nextInt(int) } as a tiebreaker > >> */ > >> public static Comparator<Method> PSUEDO_RANDOM = new > >> Comparator<Method>() { > >> public int compare(Method m1, Method m2) { > >> final int nextInt = randomizer.nextInt(2); > >> return nextInt == 0 ? -1 : 1; > >> } > >> }; > >> > >> I can submit the full code sample with Junit test cases somewhere. It > >> would be a great addon in junit since there are many developers that > >> sometimes forget that it is a bad idea to create test classes where the > >> testmethods depend on each other. TestNG has this feature. This addon > >> would > >> make Junit standout better in feature comparisions. > >> > >> Look forward to hearing from you soon. > >> > >> Regards > >> > >> Long time user and promoter of Junit > >> > >> - ikedumike > >> > >> > >> > > > > >