3

MyAppliction を制御する RenamingMockContext を構築しようとしています。

次のようになります。

public class RenamingMockContext extends RenamingDelegatingContext {
    private static final String PREFIX = "test.";

    public RenamingMockContext(Context context) {
        super(new DelegatedMockContext(context), PREFIX);
    }

    private static class DelegatedMockContext extends MockContext {
        private Context mDelegatedContext;

        public DelegatedMockContext(Context context) {
            mDelegatedContext = context;
        }

        @Override
        public String getPackageName() {
            return mDelegatedContext.getPackageName();
        }
    }
}

MyApplication は次のようになります。

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        AirshipConfigOptions options = AirshipConfigOptions.loadDefaultOptions(this);
        UAirship.takeOff(this, options);
        PushManager.enablePush();
        PushManager.shared().setIntentReceiver(UrbanAirshipReceiver.class);
    }
}

テストを実行すると、UnsupportedOperationException がスローされます。次のスタックトレースを使用します。

java.lang.UnsupportedOperationException
at com.carplink.aCarpLink.test.RenamingMockContext$DelegatedMockContext.getResources(RenamingMockContext.java:29)
at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
at com.urbanairship.Options.loadFromProperties(Unknown Source)
at com.urbanairship.Options.loadFromProperties(Unknown Source)
at com.urbanairship.AirshipConfigOptions.loadDefaultOptions(Unknown Source)
at com.carplink.aCarpLink.CarpLinkApplication.onCreate(CarpLinkApplication.java:15)
at android.test.ApplicationTestCase.createApplication(ApplicationTestCase.java:122)
at com.carplink.aCarpLink.test.CarpLinkApplicationTest.setUp(CarpLinkApplicationTest.java:24)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1606)

明らかに、アーバン飛行船の構成にはいくつかのリソースが必要です。RenamingMockContext に getResources を実装する方法を教えてください。

4

1 に答える 1

2

MockContext実装は、getResourcesメソッドを含むほとんどのメソッドに対してUnsupportedOperationExceptionをスローします。私はこの解決策が好きではないので、うまくいけば他の誰かがより良い解決策を与えるでしょう。しかし、MockContextとMockResourcesに特定のメソッドを実装することで、例外を克服することができました。

private class MyMockContext extends MockContext {
    @Override
    public Resources getResources() {
        return new MockResources() {
            @Override
            public DisplayMetrics getDisplayMetrics() {
                return new DisplayMetrics();
            }
            @Override
            public Configuration getConfiguration() {
                return new Configuration();
            }
            @Override
            public void getValue (int id, TypedValue outValue, boolean resolveRefs) {
                return;
            }
            @Override
            public boolean getBoolean(int id) {
                return true;
            }
            @Override
            public int getDimensionPixelSize(int id) {
                return 0;
            }
        };
    }
}

あなたのマイレージは異なる場合があります; 一部のオーバーライドされたメソッドは、私の特定のアプリケーションにのみ適用される可能性があります。

于 2012-08-13T04:07:45.737 に答える