2014-04-08 44 views
1

我只是想不通为什么DropwizardServiceRule突然开始在测试完成时抛出错误。这里的错误:DropwizardServiceRule在测试完成后抛出NullPointerException

java.lang.NullPointerException 
    at com.yammer.dropwizard.testing.junit.DropwizardServiceRule$1.evaluate(DropwizardServiceRule.java:40) 
    at org.junit.rules.RunRules.evaluate(RunRules.java:18) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 

这里就是我如何初始化规则:

@ClassRule 
public static final DropwizardServiceRule<RestServiceConfiguration> RULE = TestHelper.getDropwizardStartUpRule(); 

而且我TestHelper看起来是这样的:

public static DropwizardServiceRule<RestServiceConfiguration> getDropwizardStartUpRule() 
    { 
     return new DropwizardServiceRule<RestServiceConfiguration>(RestService.class, 
       Resources.getResource("rest-test.yml").getPath()); 
    } 

我检查了DropwizardServiceRule代码好像空指针从这里抛出:

@Override 
    public Statement apply(final Statement base, Description description) { 
     return new Statement() { 
      @Override 
      public void evaluate() throws Throwable { 
       startIfRequired(); 
       try { 
        base.evaluate(); 
       } finally { 
        jettyServer.stop(); 
       } 
      } 
     }; 

所有帮助表示感谢!

+0

40行在哪里?这是一个:'base.evaluate();'? – donfuxx

+0

我想通了。其实这是surefire-plugin和dropwizard之间的问题。不知道到底是什么,但我强迫我的确定的插件,它开始工作!谢谢回复 – shahshi15

回答

1

这个错误可能会产生误导,往往根本原因是当设置了ServiceRule,如遇到一个问题:

  • 的YML文件无法找到或没有正确解析。
  • 用作服务配置一部分的一个类查找单独的配置文件(例如Shiro .ini),并且找不到或读取该文件。

在处理堆栈中显示的特定NPE之前,首先检查是否存在任何这些问题。

相关问题