Android单元测试,上下文在测试中的活动之间传递

时间:2012-09-25 19:49:03

标签: android unit-testing applicationcontext

我想在我的应用程序的一个干净实例上运行一些单元测试,并认为我可以通过使用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;
}

1 个答案:

答案 0 :(得分:0)

所以你需要的是ActivityUnitTestCase,这也为你提供了注入应用程序的能力。 ActivityInstrumentationTestCase2不提供注入Application的方法,因此使用Activity的默认值。