0

を使用してサービスをテストしていますServiceTestCase

public class MyTest extends ServiceTestCase<MyService>{
   private Context mContext;
   private Intent intent;

   public MyTest(){
     super(MyService.class);
   }

   @Override
   public void setUp() throws Exception {
    super.setUp();
    mContext = this.getContext();
    intent = new Intent(mContext, MyService.class);
   }

   @MediumTest
   public void runMyTest(){
    startService(intent);
   }

   @Override
   public void tearDown() throws Exception {
     super.tearDown();
     MyService service = getService();

     //line 33, NullpointerException here, why?
     mContext.stopService(intent); 
  }

}

しかし、テストを実行すると、コールバックで呼び出すと常にNullPointerExceptionが発生します。なんで?stopService(intent)tearDwon()

スタックトレース:

java.lang.NullPointerException
at com.my.app.test.MyTest.tearDown(MyTest.java:33)
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)
4

2 に答える 2

0

getContext() の代わりに、getSystemContext(); を試してください。

ドキュメントによると

setUp() によって保存された実際のシステム コンテキストを返します。これを使用して、テスト中のサービスのモックまたはその他のタイプのコンテキスト オブジェクトを作成します。

于 2013-09-11T08:36:47.770 に答える