Обработка исключений jUnit с DevAppServer - PullRequest
1 голос
/ 18 апреля 2019

У меня проблема с использованием тестов jUnit и обработкой исключений в Java.Я создал свой TestClass с аннотациями @ RunWith (DevAppServerTestRunner.class) и @ DevAppServerTest (TestConfig.class), поскольку мне нужно протестировать метод, использующий некоторые свойства, настроенные в моем appengine.-web.xml file.

Проблема возникает, когда после объявления jUnit @ Rule для определения исключения, которое я хочу протестировать, я запустил тест и получил сообщение об ошибке «Правило' myexceptionName ' должно реализовывать MethodRule или TestRule ".

Это довольно странно, поскольку объявленное мной исключение имеет тип ExpectedException , класс jUnit, который уже реализует TestRule.Я подозреваю, что эта проблема связана с моими аннотациями @ RunWith и @ DevAppServerTest , потому что при использовании другого класса без них работает реализация правила (решение, которое я не могу использовать, так как мне нужнопрочитайте некоторые свойства из appengine-web.xml).

Кто-нибудь сталкивался с чем-то подобным или имел представление о том, как с этим бороться?


@RunWith(DevAppServerTestRunner.class)
    @DevAppServerTest(TestConfig.class)
    public class myTestClass {

        @Rule
        public ExpectedException exc = ExpectedException.none();
        @Test
        public void TestingException() throws Exception {
            this.exc.expect(NullPointerException.class);
            String test = null;

            test.length();  
        }
    }   

Пример кода, который я здесь написал, не 't включает системные свойства appengine, но это дает эту ту же ошибку:

org.junit.internal.runners.rules.ValidationError: The @Rule 'exc' must implement MethodRule or TestRule.

at org.junit.internal.runners.rules.RuleMemberValidator$FieldMustBeARule.validate(RuleMemberValidator.java:234)
at org.junit.internal.runners.rules.RuleMemberValidator.validateMember(RuleMemberValidator.java:99)
at org.junit.internal.runners.rules.RuleMemberValidator.validate(RuleMemberValidator.java:93)
at org.junit.runners.BlockJUnit4ClassRunner.validateFields(BlockJUnit4ClassRunner.java:196)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:129)
at com.google.appengine.tools.development.testing.DevAppServerTestRunner.collectInitializationErrors(DevAppServerTestRunner.java:102)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at com.google.appengine.tools.development.testing.DevAppServerTestRunner.<init>(DevAppServerTestRunner.java:74)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
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:90)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:76)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:49)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:525)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
...