2016-07-22 4 views
0

Я пишу приложение Java, которое использует Firebase и RealtimeDB.Mocking Firebase in JUnit

Во время написания своих модульных тестов, я столкнулся с довольно странным вопросом в том, что Firebase классы не могут быть загружены в JUnit, бросая NoSuchMethodError: java.lang.NoSuchMethodError: com.google.common.primitives.UnsignedInteger.asUnsigned(I)Lcom/google/common/primitives/UnsignedInteger;

мне удалось разыскать его в Firebase с помощью другая версия гуавы, чем остальная часть проекта, но несмотря на то, что я вынужден использовать гуавы 19,0 (через механизм исключения зависимости Maven), я все еще получаю ту же ошибку, по-видимому, когда класс FirebaseOptions загружается (точное местоположение: com.google.firebase.FirebaseOptions$Builder.setServiceAccount(FirebaseOptions.java:77)).

EDIT: Проблема возникает только во время тестового запуска, во время выполнения библиотека Guava загружается правильно.

Есть ли у кого-нибудь идеи о том, как правильно обеспечить Firebase библиотекой Guava?

+0

Добавить свою зависимость, потому что это похоже на старую версию Guava – Hrabosch

+0

@Hrabosch Я попытался это сделать, добавив Guava, который находится в POM Firebase явно, и позволив 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> 

), а затем заставить чистку локального хранилища. После повторной индексации проекта тест смог загрузить соответствующие классы без проблем.