使用DevAppServer处理jUnit异常

时间:2019-04-18 09:11:25

标签: java google-app-engine exception junit-rule dev-appserver

我在使用jUnit测试和处理Java中的异常时遇到问题。 我创建了带有注释 @RunWith (DevAppServerTestRunner.class)和 @DevAppServerTest (TestConfig.class)的TestClass,因为我需要测试使用在我的appengine-web.xml文件。

当声明了要测试的异常的jUnit @Rule 后,我运行了测试并收到一条错误消息,提示“规则' myexceptionName >'必须实现MethodRule或TestRule”。

这很奇怪,因为我声明的异常的类型为 ExpectedException ,这是一个已经实现TestRule的jUnit类。 我怀疑这个问题与我的 @RunWith @DevAppServerTest 注释有关,因为使用没有它们的另一个类,Rule实现有效(自从我无法使用该解决方案需要从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();  
        }
    }   

我在此处编写的示例代码不涉及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)

0 个答案:

没有答案