問題タブ [google-truth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
4287 参照

android - Android X + Truth + Guava テスト コンパイルの問題

大規模なプロジェクトの一部として、Android ライブラリ (と呼ばれるapi) gradle モジュールがあります。プロジェクト全体を AndroidX に移行しました。apiライブラリでインストルメンテーション テストを実行すると、次のエラーが発生します。

debugAndroidTestバリアントのランタイム クラス パスを確認すると、次のようになります。

この出力が得られます。私は問題を見ることができます:

AndroidX コアはグアバの新しい「ListableFuture-only」ビルドに依存しており、Truth は完全な Guava 25 に依存しています。

ListenableFuture の根本的な問題を理解していると思います: https://groups.google.com/forum/#!topic/guava-announce/Km82fZG68Sw

ここで正しい解決策は何ですか?

Guava を Truth から完全に除外したくありません (そうしないと、Truth はコンパイルされません)

最初のレベルの依存関係にすることで、Guava 27 への更新を除外 + 強制することはできますか?

これを行う場合、アンドロイドまたは JRE バージョンのグアバを使用する必要がありますか?

副次的な質問:

compileクラスパスを見たときにグアバの依存関係が表示されないのはなぜですか? エラーは実行時エラーではなく、コンパイル時エラーです

結果の deps:


アップデート:

Truth 0.43 にアップデートした後、次のエラーが表示されます。

私が正しく理解していれば:

  • Truth 0.43 は Guava 27 に依存します
  • Guava 27 は、バージョン 9999.0-emptyのコピーが内部9999.0-emptyに含まれているため、依存しています。ListenableFuture
  • AndroidXコアのような他のライブラリが依存していますlistenablefuture:1.0
  • 競合を解決する場合 (バージョン 1.0 または 9999.0 を使用する必要がありますか?)、Gradle は最新バージョン (この場合は 9999.0) を選択します。
  • したがって、AndroidX コアは実際ListenableFutureにはGuava を介してクラスパスから取得していますが、賢明ではありません。
  • ただし、strictlyキーワードは 1.0 の使用を強制しています
  • これは、Android Gradle プラグインが実行時とコンパイル時のクラスパスを強制的に同じバージョンに依存させるためです =(詳細はこちら

そのため、今何をすべきか悩んでいるのが現状です。

0 投票する
3 に答える
1999 参照

google-truth - Android Studio - 未解決の参照:​​ 真実

テスト用にプロジェクトに Google Truth フレームワークを含めようとしています。プロジェクトのセットアップ方法に関するドキュメントに従いました。

これは私のアプリの build.gradle ファイルからのものです:

同期プロセスは正常に完了します。

次に、たとえばローカル単体テストを実行しようとします。

Kotlin コンパイラ エラーが表示されます: Unresolved reference: true

注意すべき点がいくつかあります。

  • 真実に関連する方法をタイプし始めて使用しようとすると、それらの方法のいずれにも提案がありません。これは import ステートメントを手動で追加することはありませんが、提案された方法から適切な方法を選択すると、Android Studio は常にそれを自動的に行っているため、これが私が最初に気付いた奇妙な点でした。
  • 上記がうまくいかなかったとき、私は手動でインポートを行い、何をインポートするかを入力していると、com.google.common.truth.Truth... の提案が表示されました。これは、少なくとも jar ファイルがどこかにあることを示しました。見つけられる。この手動インポートの後、Android Studio は以前に予想したとおり、Truth からのメソッドの提案を開始しました。

上記の手順を実行した後、テストを実行しようとしましたが、未解決の問題が引き続き発生します。

誰でもこれに光を当てることができますか?誰もこれに遭遇しましたか。どんな種類の助けにも本当に感謝しています!

0 投票する
1 に答える
584 参照

android - androidTestImplementation Google Truth 1.0 および実装 Google Guava 27.0.1 で満たされないバージョン制約

要するに

次の依存関係を追加してビルドするための最小限の新しいAndroid Studioプロジェクトを取得できません。

再現方法

これは私がやっている方法ですが、もちろん他の方法もあります。

  1. Android Studio 3.5.2 の場合:
    1. ファイル新規新規プロジェクト...
  2. 新規プロジェクトの作成ダイアログで:
    1. [電話とタブレット] タブ → [アクティビティを追加しない] → [次へ]
    2. 名前,パッケージ名,保存場所:好きなように
    3. 言語: Java
    4. 最小 API レベル: API 28
    5. このプロジェクトは Instant Apps をサポートします:無効
    6. 終了
  3. ./app/build.gradle:
    1. implementation 'com.google.guava:guava:27.0.1-android'androidTestImplementation "com.google.truth:truth:1.0"を 追加dependencies
  4. ExampleInstrumentedTest.javaでは
    1. を右クリックして、 Run 'ExampleInstrumentedTest'class ExampleInstrumentedTestを選択します。

予想される
テストに合格する

実際の
ビルド エラー:

このビルドの問題を修正するにはどうすればよいですか?