【问题标题】:Android Unit Test, context is passed between activities in testsAndroid单元测试,测试中的活动之间传递上下文
【发布时间】:2012-09-25 19:49:02
【问题描述】:

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

【问题讨论】:

    标签: android unit-testing applicationcontext


    【解决方案1】:

    所以你需要一个ActivityUnitTestCase,它也让你能够注入一个应用程序。 ActivityInstrumentationTestCase2 不提供注入应用程序的方法,因此使用 Activity 的默认值。

    【讨论】:

    • 感谢您的回复。我了解到 Android 并没有真正用 finish() 结束应用程序,而是将其留在后台。重新打开上下文后会重用,我想知道这是否是有意的。解决方案非常简单,即初始化通过 onCreate() 中的应用程序上下文传递的变量。这总是很好的做法。我希望您的解决方案也能正常工作,因为使用 ActivityUnitTestCase 每次都可以清理上下文。
    猜你喜欢
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多