我正在测试我的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
。我该怎么测试呢?
答案 0 :(得分:0)
使用此代码可以正常使用:
public class SimilarityTaskTest extends ActivityTestCase {
public void testSimilarity() {
task = new SimilarityTask(getInstrumentation().getTargetContext());
task.execute(false);
}
}