Junit4: @RunWith(MyCustomRunner.class) - IllegalAccessException

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рджрд┐рд╕ре░ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: junit-team/junit4

рдирдорд╕реНрддреЗ,

рдореИрдВрдиреЗ рдЬреБрдиреАрдЯ рдХрд╕реНрдЯрдо рд░рдирд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ "рдХрд╕реНрдЯрдо рдзрд╛рд╡рдХ" рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ,
рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ рдПрдХ рд╣реА рдЕрдкрд╡рд╛рдж рджреЗрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореВрд░реНрдЦ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВред

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛ рд╣реИ:

@RunWith(MyYetAnotherRunner.class)
public class BestPracticesForUsingJUnit_OwnRunner2 {
    <strong i="9">@Test</strong>
    public void one() {
    }
    <strong i="10">@Test</strong>
    public void two() {
    }
    <strong i="11">@Test</strong>
    public void three() {
    }
}

"рдХрд╕реНрдЯрдо рдзрд╛рд╡рдХ" рд╡рд░реНрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

class MyYetAnotherRunner extends Runner {
    private Class<?> testClass;
    public MyYetAnotherRunner(Class<?> testClass) {
        super();
        this.testClass = testClass;
    }
    <strong i="15">@Override</strong>
    public Description getDescription() {
        return Description.createTestDescription(testClass, "My runner description");
    }
    <strong i="16">@Override</strong>
    public void run(RunNotifier notifier) {
        System.out.println("running the tests from MyRunner: " + testClass);
        try {
            Object testObject = testClass.newInstance();
            for (Method method : testClass.getMethods()) {
                if (method.isAnnotationPresent(Test.class)) {
                    notifier.fireTestStarted(Description.createTestDescription(testClass, method.getName()));
                    method.invoke(testObject);
                    notifier.fireTestFinished(Description.createTestDescription(testClass, method.getName()));
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

рдореИрдВрдиреЗ BlockJUnit4ClassRunner рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рднреА рдЕрдкрдиреА рдХрд┐рд╕реНрдордд рдЖрдЬрдорд╛рдИ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖ:

class MyRandomBlockJUnit4ClassRunner extends BlockJUnit4ClassRunner {
    public MyRandomBlockJUnit4ClassRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }
    protected java.util.List<org.junit.runners.model.FrameworkMethod> computeTestMethods() {
        java.util.List<org.junit.runners.model.FrameworkMethod> methods = super.computeTestMethods();
        Collections.shuffle(methods);
        return methods;
    }
}

рдореИрдВ рдЯреЗрд╕реНрдЯ-рдХреНрд▓рд╛рд╕ BestPracticesForUsingJUnit_OwnRunner2 -> рд░рди рдЕрд╕ -> рдЬреБрдиреАрдЯ рдЯреЗрд╕реНрдЯ рдкрд░ "рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ" рджреНрд╡рд╛рд░рд╛ рдЧреНрд░рд╣рдг рдХреЗ рдЕрдВрджрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реВрдВред

рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рд╣реИ:

java.lang.IllegalAccessException: Class org.junit.internal.builders.AnnotatedBuilder can not access a member of class 
part2.ch9.RandomBlockJUnit4ClassRunner with modifiers "public"
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
    at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
    at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:413)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:87)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:73)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:522)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

рдЕрдЬреАрдм рдЪреАрдЬ рдкреВрд░реНрд╡-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд Parameter.class -JUnit-Test-Runner рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддреА рд╣реИред

рдЧрд▓рдд рдХреНрдпрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ!

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдзрд╛рд╡рдХ рд╡рд░реНрдЧ рдХреЛ public ред

рдЯрд┐рдХрдЯ рдЦреЛрд▓рдиреЗ рдФрд░ рдЖрдкрдХреЛ рдРрд╕реА рддреБрдЪреНрдЫ рдмрд╛рддреЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рдпрд╣ рдЯрд┐рдХрдЯ, рдЬреЛ рдмрдВрдж рдЯрд┐рдХрдЯ рдЦрдВрдб рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдпреЛрдЧреНрдп рднреА рдирд╣реАрдВ рд╣реИ, рдЬреБрдиреАрдЯ-рдЬреАрдердм рд░реЗрдкреЛ рдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПред

рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

lvc picture lvc  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

apreg picture apreg  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pbenedict picture pbenedict  ┬╖  27рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sabi0 picture sabi0  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bigmikef picture bigmikef  ┬╖  39рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ