2016-07-25 7 views
4

「クラスの重複」エラーと、クラスが2つある場合に表示される視覚的インジケータ(赤い波打ち線)をオフにする必要があります。同じパッケージだが異なるフォルダに同じ名前が付けられている。この場合、 'main'と 'test'。テストフォルダ内のクラスの重複クラスエラーを無効にする - Android Studio/IntelliJ

背景

はそれ、これはthis投稿の複製であることを主張することができ、しかし、私はいくつかの背景が明らか回答のいくつかを回避するために、だろうと思った(とも、満足な答えはありませんその投稿に)。

この質問は、単体テストと共同作業者のモッキングに関するものです。誰もが知っているように、AndroidはJava開発のための基本的な「継承上の封じ込め」ガイドラインに違反しています。このため、フレームワークがテストをクラッシュさせずにライフサイクルオーバーライドをテストするには、Robolectricが必要です。テスト対象のクラスが協力者であるため、あなたの共同編集者は通常の方法で嘲笑され注入できません。

この場合、私の大企業のクライアントは、代わりに使用する必要があるアクティビティーとフラグメントからクラス拡張のいくつかのレイヤーを追加して、「継承オーバーフロー」ガイドラインに違反しています。私はこれらのレイヤーを変更することはできませんし、内部をモックしようとするのは実用的ではありません。最も簡単な解決策は、この余分なレイヤーのリーフクラスの複製を作成して、ユニットテストに優しい結果をテスト対象クラスに提供することでした。

これは機能します。単体テストを実行するとテストの重複が解決され、実動コードを実行すると実動の重複が解決されます。

抑止する必要があるのは、ちょっと変わった迷惑なエラー表示です。

回避策、IntelliJプラグイン、カスタムクラスローダなど - すべてが考慮されます(手順を参照)。

+0

をスタジオ(2.2)の最新アップデートは、もはやこのエラーを報告しません。 –

+0

AS 2.3.3はそれを私のために報告しますが、少なくとも '/ test /'の亜種についてのみ報告します。また、すべてのものが期待どおりに動作します(JUnitテストは、複製のvariantを使用し、正しい '/ main /'を使用しています)。ところで、テストで実行されたときに、デバッグビルドタイプでtrue/falseを違うように設定したブール値が1つだけ必要でした(デバッグでリリースバリアントの小さな部分を使用し、リリース/デバッグコードを 'if(BuildConfig.DEBUG)'いずれにせよ)。いくつかの異なるアプローチを試みましたが、エレガントでシンプルなものは1つもなく、それぞれハックのような感じです。最後のこの「重複エラー」は、最高のものの1つに見えます。 – Ped7g

答えて

1

それはハードコードさ:source

唯一の方法は、ソースを変更して、独自のIntelliJを構築することです - しかし、あなたは究極のバージョンを使用することはできません。

またはmaking an agent to replace the method - HighlightClassUtil.checkDuplicateTopLevelClassです。あなたは、通常のプラグインとしてそれを行うことができますので

これは、便利来るかもしれない:How can I add a Javaagent to a JVM without stopping the JVM?

関連する問題