2016-07-22 62 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> 

),然後強制本地資源庫的清洗。在對項目重新編制索引之後,測試能夠無問題地加載適當的類。