0

アプリケーションのクリーンなインスタンスで多数の単体テストを実行したいのですが、getActivity を使用してインスタンスを作成し、テストの最後にそれを終了することで実行できると考えました。しかし、前のテストでのアクションが次のテストに影響を与えていることに気付きました。問題を再現するために、次の簡単なアプリケーションを作成しました。

テスト セットアップは、各テストでアクティビティを取得して終了するいくつかのテストを示しています。アクティビティの作成中に、カウンターが onCreate でインクリメントされます。3 回のテストではすべて 1 であると予想されますが、最新のテストでは 3 であることがわかります。どういうわけかコンテキストが再利用されます。

各テストでアプリケーションをゼロからテストする方法を誰かが説明し、示すことができますか?

import com.example.activitykeepscontext.MainActivity;

public class MainActivityTest  extends ActivityInstrumentationTestCase2<MainActivity> {

   public MainActivityTest() {
        super("com.example.activitykeepscontext", MainActivity.class);
    }

   public void testCount1() {
       MainActivity mainActivity = getActivity();
       mainActivity.finish();
   }

   public void testCount2() {
       MainActivity mainActivity = getActivity();
       mainActivity.finish();
   }

   public void testCount3() {
       MainActivity mainActivity = getActivity();
       mainActivity.finish();
   }

}

これはアプリケーションです:

package com.example.activitykeepscontext;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AppData appData = (AppData)getApplicationContext();
        appData.count++;

        Log.i(TAG, "Count: " + appData.count);
    }
}

これは、アプリケーション コンテキストを介してデータを渡すために使用されるクラスです。

package com.example.activitykeepscontext;

import android.app.Application;

public class AppData  extends Application {
    public int count;
}
4

1 に答える 1

0

したがって、必要なのはActivityUnitTestCaseであり、アプリケーションを注入する機能も提供します。ActivityInstrumentationTestCase2 はアプリケーションを注入する方法を提供しないため、アクティビティのデフォルトを使用します。

于 2012-09-25T21:06:42.060 に答える