2011-02-15 16 views
1

私はカスタムダイアログを含むアプリケーションを単体テストしています。このダイアログはandroid.app.Dialogから継承されますが、Activityの特別なサブクラスが必要です。これは、それが必要とするいくつかの機能を提供するCustomActivityと呼ばせてください。私はAndroidでカスタムダイアログを単体テストしようとしており、インスタンス化できないようです。

テスト済みのアプリケーションからアクティビティの1つをインスタンス化するのは避けたいのですが、テスト済みです。私は単体テストであり、ブラックボックステストではないので、ダイアログ内のすべてのパブリック関数を実行したい。ただし、最初にダイアログをインスタンス化せずに、CustomActivityインスタンスが必要です。

私はCustomActivityのモックサブクラスを作成しようとしましたが、それを使ってダイアログを起動しましたが、私は同じ問題を抱えています。テストアプリケーションは、テストアプリケーションでアクティビティを探していません。応用。だから私は "活動を解決することができません"を取得します。

私はまた、Instrumentation.launchActivityを使用せずに自分でアクティビティを作成しようとしましたが、それにはコンテキストが必要です。コンテキストには、InstrumentationTestCaseがありません。 AndroidTestCaseを代わりに使用すると、提供されたコンテキスト(getContextを介して)はちょうどContextWrapperであり、コンテキストをラップしていないように見えるので、正方形に戻ります。最初にアクティビティをインスタンス化する必要があります。

私はグーグルでグーグルをしています。私がユニットテストに必要な最初の人物であるとは信じられません。Dialog私には、ActivitiTestCase2と似た何かが必​​要だが、必要な文脈を提供するダイアログが必要だと思われる。

ダイアログを作成する最も良い方法は何ですか?私が試したことのない別の方法がありますか?誰かがカスタムダイアログユニットテストの例を持っていますか?

答えて

1

これは、Androidの問題ではなくオブジェクト指向の問題のようです。あなたの中心的な問題はクラス間の密接なつながりかもしれないと思います。カスタムアクティビティのモックサブクラスを作成するのではなく、ダイアログに必要な機能だけを公開し、テストでインターフェイスをモックするCustomActivityの前にインターフェイスを導入してみてください。がんばろう!

+0

これは良い提案です。あなたは実際にこれを試したことがありますか?アクティビティのないダイアログをインスタンス化することは可能ですか?既にアンドロイドシステムでは、いくつかの緊密な結合があるようです。 :) –

+0

私はそれを試してみましたが、実際のアクティビティ・コンテキストがなくてもダイアログを表示することはできません。ここには多くのAndroidの魔法があり、苦労しています。ダイアログをテストするのは本当に難しいでしょうか? –

+0

私は、CustomActivityをインスタンス化するのが理にかなっているのは、扱いが難しいという理由からだと思います。上記の手法では、アクティビティコンテキストを使用する必要がありますが、非常に簡単なアクティビティを使用できます。アプリケーションに非常に単純なアクティビティがまだ含まれていない場合は、空のアクティビティを追加し、テストでそのアクティビティをコンテキストに使用できます。確かに、それは完璧ではありませんが、機能します。もし誰かがもっと良い解決策を持っていれば、私もそれを聞いてうれしく思います。あなたは、このものに関連するAndroidのデザインにいくつかの欠陥があると思うのは間違いありません。 –

関連する問題