Junit4: RunWith (MyCustomRunner.class) - IllegalAccessException

تم إنشاؤها على ٥ ديسمبر ٢٠١٨  ·  3تعليقات  ·  مصدر: junit-team/junit4

أهلا،

لقد حاولت تنفيذ عدة أنواع من "العدائين المخصصين" للتعرف على مفهوم JUnit Custom Runners ،
لكن كل واحد منهم يعطي نفس الاستثناء وأنا غبي جدًا لمعرفة السبب.

لقد كتبت الاختبار التالي:

@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 -> تشغيل باسم -> اختبار JUnit.

في كل حالة ، يكون تتبع تكديس الخطأ هو:

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 .

آسف لفتح تذكرة وإزعاجك بمثل هذه الأشياء التافهة.

أتمنى أن تختفي هذه التذكرة ، التي لا تستحق حتى أن تكون في قسم التذاكر المغلق ، في أعماق ريبو JUnit-Github.

لا تقلق إطلاقا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات