使用应用资源测试Async-Task

时间:2014-06-30 17:19:17

标签: java android testing android-asynctask android-context

我正在测试我的Android应用程序。我有两个android项目,一个包含应用程序,另一个包含测试类。

我正在测试AsyncTask:

public class SimilarityTask extends AsyncTask<Boolean, Void, SimilarityData> {


    /*More code here*/

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        mProgressDialog = new ProgressDialog(context);
        mProgressDialog.setTitle(context.getText(R.string.solving_puzzle));
        mProgressDialog.setMessage(context.getText(R.string.calc_similarity));
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        mProgressDialog.setCancelable(true);
    }



    public SimilarityTask(Context context) {
        this.context = context;
    }

    /*More code here*/

}

如您所见,我在活动上创建了一个进度对话框,其中使用活动作为上下文调用此AsyncTask。代码工作正常,但问题出现在我试图测试它时。

public class SimilarityTaskTest extends ActivityTestCase {

    public void testSimilarity() {
        task = new SimilarityTask(getInstrumentation().getContext());
        task.execute(false);        
    }

}

当我使用此代码时,它在onPreExecute()上失败:

android.content.res.Resources$NotFoundException: String resource ID #0x7f07000a
at android.content.res.Resources.getText(Resources.java:229)
at android.content.Context.getText(Context.java:282)
at com.example.tfg.SimilarityTask.onPreExecute(SimilarityTask.java:43)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
at android.os.AsyncTask.execute(AsyncTask.java:534)
at com.example.tfg.test.SimilarityTaskTest.testSimilarity(SimilarityTaskTest.java:161)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)

异常是非常自我解释的:R.string.solving_puzzle,在我的应用程序项目上而不是我的测试项目。我如何获得上下文,就像我从我的应用程序项目而不是我的测试项目中运行它一样?

我也使用过这段代码:

public class SimilarityTaskTest extends ActivityTestCase {

    public void testSimilarity() {
        task = new SimilarityTask(getActivity());
        task.execute(false);        
    }

}

getActivity()会返回null。我该怎么测试呢?

1 个答案:

答案 0 :(得分:0)

使用此代码可以正常使用:

public class SimilarityTaskTest extends ActivityTestCase {

    public void testSimilarity() {
        task = new SimilarityTask(getInstrumentation().getTargetContext());
        task.execute(false);        
    }
}