2

アプリケーションで奇妙なバグが発生しています。をMyApplication拡張するクラスがありApplicationます。そのonCreate()メソッドでは、文字列リソース ファイルに格納された API キーを必要とするいくつかのサード パーティ ライブラリを初期化します。基本的に、Nexus S と Galaxy SIII でテストできるデバイスで問題なく動作します。しかし、クラッシュ レポート システムからいくつかのエントリを取得しました。Robolectric テストを実行すると、メソッドMyApplication.onCreate()から NullPointerException が発生しgetString()ます。

誰かが同じ問題を抱えていたのだろうか、何が原因なのだろうか?

テスト用のログ出力 (クラッシュ レポートも の同じ行をsetupAnalyticsCrashReportingAndThirdPartySdks参照):

java.lang.NullPointerException
at org.robolectric.shadows.ShadowResources.getResName(ShadowResources.java:100)
at org.robolectric.shadows.ShadowResources.getString(ShadowResources.java:130)
at android.content.res.Resources.getString(Resources.java)
at org.robolectric.shadows.ShadowContext.getString(ShadowContext.java:54)
at android.content.Context.getString(Context.java)
at com.myapp.android.MyApplication.setupAnalyticsCrashReportingAndThirdPartySdks(MyApplication.java:113)
at com.myapp.android.MyApplication.onCreate(MyApplication.java:42)
at com.myapp.android.util.UtilitiesTest.setUp(UtilitiesTest.java:44)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:106)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)

更新: コードの一部:

public class MyApplication extends Application

{

private static MyApplication _instance;

@Override
public void onCreate()
{
    super.onCreate();

    setupAnalyticsCrashReportingAndThirdPartySdks();
}

public MyApplication()
{
    _instance = this;
}

public static MyApplication getInstance()
{
    return _instance;
}

private void setupAnalyticsCrashReportingAndThirdPartySdks()
{
    String env = getString(R.string.environment); // Crash here
    if (env != null && env.equalsIgnoreCase("dev"))
    {
        FlurryAnalytics.setDebugMode(true);
    }
}

}

4

0 に答える 0