2016-06-16 52 views
2

現在、私はIntentエクストラについて少し困惑しています。 私は、いわゆるエキストラがBundleであり、Bundle が内部的に地図であることを知っています。シンプルインテント - jUnitテストに失敗しました

もし私がintent.putExtra("someName", "someValue");でこのマップに何かを入れたら、マップに "someName"と呼ばれるキーがあると思います。しかし、私の非常に簡単な単体テストによると、そうではありません。以下で

public void testIntent(){ 
    assertTrue("true != true", true); 
    assertFalse("false != false", false); 

    final String extraName = "IamAnExtra"; 
    final String extraValue = "IamAValue"; 
    Intent intent = new Intent(); 
    intent.putExtra(extraName, extraValue); 

    assertTrue("hasExtra==false", intent.hasExtra(extraName)); 
    } 

は今THS結果:意思コードの後ろに何が起こっている魔法の

junit.framework.AssertionFailedError: hasExtra==false 

どのような? 私はそれが正常に動作していることを知っています。私が意図を送った場合にのみ地図がキャッシュされ、 が書かれていますか?前もって感謝します!

編集:

私も失敗ラインassertNotNull("extras == null", intent.getExtras());を追加しました。

そして私はある方法putExtragetExtrasからコードをチェック:

public Intent putExtra(String name, String value) { 
    if (mExtras == null) { 
     mExtras = new Bundle(); 
    } 
    mExtras.putString(name, value); 
    return this; 
    } 

public Bundle getExtras() { 
    return (mExtras != null) 
      ? new Bundle(mExtras) 
      : null; 
    } 

だから、メンバーmExtrasがnullの場合、nullがgetExtrasのために返されます。 しかし、putExtraはmExtrasの新しいBundleインスタンスを作成します。したがって、 mExtrasでなければなりません。よくわかりません。

+0

あなたは_unit test_または_instrumented test_として実行していますか? JUnit 4はどのフレームワークを使用していますか? – josemigallas

+0

単体テスト。私は通常のTestCaseを使用しました。 – JacksOnF1re

+0

私は、普通のインテントを使っても良い古いユニットで使うのは大丈夫だと思ったのですか?私はそれを送ろうとするつもりはありません。 – JacksOnF1re

答えて

1

問題は、通常のUnit Testを使用してAndroid SDKでテストしようとしていることです。 Androidのユニットテストは、mockitoのようないくつかの模倣ライブラリとプレーンJavaコードを使用して、アプリケーションロジック用にのみ使用する必要があります。

Instrumented Testを使用して、その意図を模擬するか、実際のデバイスでそのテストを実装するかを選択する必要があります。

あなたはexplanation why hereです。

EDIT:

エントリが参照するこのGradleのフラグ:

testOptions { 
     unitTests.returnDefaultValues = true 
    } 

は唯一のテストは、すべての警告例外なく実行することができますが、SDKを使用して、あなたができますしません。実際にIntentをインスタンス化すると、null参照以外は何も得られません。結局、アサートのintent.hasExtra(...)は真ではありません。

+0

joseさん、ありがとう、私はすべてのリファレンスを読んで、明日それをテストし、答えを受け入れます。 – JacksOnF1re

関連する問題