2012-09-25 40 views
0

我想在我的应用程序的干净实例上运行多个单元测试,并认为我可以通过使用getActivity创建实例并在完成时完成它测试。但是,我注意到之前测试中的操作对下一个操作有影响。我编写了以下简单的应用程序来重现问题。Android单元测试,上下文在测试中的活动之间传递

测试设置显示了一系列测试,我从中获得活动并在每个测试中完成测试。在创建活动期间,计数器在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; 
} 

回答

0

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

+0

感谢您的回复。我了解到Android并未真正以finish()结束应用程序,而是将其保留在后台。重新开放后,上下文被重用,我想知道这是否是有意的。该解决方案非常简单,它正在初始化通过onCreate()中的应用程序上下文传递的变量。这总是很好的做法。我期望你的解决方案能够很好地工作,因为使用ActivityUnitTestCase可以每次清理上下文。 – Lorenz

相关问题