2016-07-22 68 views
0

我正在编写一个利用Firebase和RealtimeDB的Java应用程序。在JUnit中模拟Firebase

在写我的单元测试,我遇到了在一个相当奇怪的问题火力地堡类不能内部JUnit的加载,扔的NoSuchMethodError: java.lang.NoSuchMethodError: com.google.common.primitives.UnsignedInteger.asUnsigned(I)Lcom/google/common/primitives/UnsignedInteger;

我已经成功地追查利用到火力地堡一个不同于Guava版本的版本,但是即使我强制使用Guava 19.0(通过Maven依赖关系排除机制),我仍然遇到同样的错误,显然是在FirebaseOptions类被加载时(确切位置:com.google.firebase.FirebaseOptions$Builder.setServiceAccount(FirebaseOptions.java:77))。

编辑: 该问题仅出现在测试运行期间,在运行时,Guava库正确加载。

有没有人有任何想法如何妥善提供Firebase的番石榴图书馆?

+0

添加您的依赖项,因为这看起来像旧版本的番石榴 – Hrabosch

+0

@Hrabosch我试过了,都是通过明确添加Firebase POM中的Guava,并让Maven以传递方式解决它(它具有,我可以看到它在清除后重新出现在我的本地Maven缓存中),但无济于事。 –

回答

2

显然,将溶液添加分辨率排除到POM(使得最终依赖如下

<dependency> 
    <groupId>com.google.firebase</groupId> 
    <artifactId>firebase-server-sdk</artifactId> 
    <version>[3.0.0,)</version> 
    <exclusions> 
     <exclusion> 
      <groupId>guava</groupId> 
      <artifactId>guava</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

),然后强制本地资源库的清洗。在对项目重新编制索引之后,测试能够无问题地加载适当的类。