2011-04-21 100 views
0

餘米嘗試寫一些基本的JUnit測試,但我得到以下幾點:基本的Android的JUnit測試問題

java.lang.RuntimeException: Unable to resolve activity for: Intent { action=android.intent.action.MAIN flags=0x10000000 comp={michaels.pack.POI/michaels.pack.POI} } 
at android.app.Instrumentation.startActivitySync(Instrumentation.java:447) 
at android.test.InstrumentationTestCase.launchActivityWithIntent(InstrumentationTestCase.java:106) 
at android.test.InstrumentationTestCase.launchActivity(InstrumentationTestCase.java:84) 
at android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:87) 
at michaels.pack.test.POITest.setUp(POITest.java:21) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:164) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:151) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:418) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1520) 

現在要測試的類被稱爲POI及其在michaels.pack包!

我的測試類是:

package michaels.pack.test; 

import michaels.pack.POI; 
import android.test.ActivityInstrumentationTestCase2; 
import android.widget.TextView; 

public class POITest extends ActivityInstrumentationTestCase2<POI> { 

    private TextView mView; 
    private POI mActivity; 
    private String resourceString; 

    public POITest() 
    { 
     super("michaels.pack.POI", POI.class); 
    } 

    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
     mActivity = (POI)this.getActivity(); 
     mView = (TextView) mActivity.findViewById(michaels.pack.R.id.username); 
     resourceString= mActivity.getString(michaels.pack.R.id.username); 
    } 

    public void testPreconditions() 
    { 
      assertNotNull(mView); 
    } 

    public void testText() { 
      assertEquals(resourceString,(String)mView.getText()); 
     } 
} 

任何人都可以看到什麼不好呢?

這與項目名爲POIapp和我的「主」類(POI)有什麼關係?

只是要指出,他們實際上是兩個不同的項目!

這裏有體現:

測試清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="michaels.pack.test" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="3" /> 
    <instrumentation android:targetPackage="michaels.pack" android:name="android.test.InstrumentationTestRunner" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

    <uses-library android:name="android.test.runner" /> 
    </application> 
</manifest> 

應用程序清單:提前

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="michaels.pack" android:versionCode="1" android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:debuggable="true"> 
     <uses-library android:name="com.google.android.maps" /> 
     <activity android:name=".POI" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".Register" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"/> 
     <activity android:name=".MainMenu" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"/> 
     <activity android:name=".ManagePOIsList" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"/> 
     <activity android:name=".MapViewClass" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"/> 
     <activity android:name=".NewPOIForm" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"/> 
     <activity android:name=".ShowPOIsDetails" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"/> 
     <activity android:name=".CreatePoiCoordinates" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"/> 
     <activity android:name=".PreferenceClass" android:label="@string/app_name" 
      android:windowSoftInputMode="adjustPan" android:configChanges="keyboardHidden|orientation"/> 
     <service android:enabled="true" android:name=".MyServiceClass" /> 
    </application> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 

謝謝!

邁克

回答

0

它似乎在實際設備上工作!出於某種原因,它在模擬器中失敗!

0

我想這個問題是在你的清單文件,這就是爲什麼在日誌中出現comp={michaels.pack.POI/michaels.pack.POI},我想這應該是comp={michaels.pack/michaels.pack.POI}

您還需要兩個不同的項目,一個用於您的應用程序,一個用於您的測試,這是您還沒有提及的任何項目。

使用這個構造:

public POITest() 
{ 
    super(POI.class); 
} 

因爲API級別的其他已過時8.

+0

他們在兩個不同的項目!我應該提到那個抱歉!我會盡快檢查!謝謝! – mixkat 2011-04-21 05:42:44

+0

我想你的意思是應用程序的清單不是測試的權利?你能看看我編輯的問題!再次感謝! – mixkat 2011-04-21 05:46:32

0

我的猜測是你沒有在你的模擬器上設置'use mock location',但你已經在你的設備上設置了'use mock location'。這就是爲什麼當您在清單中設置權限時,這個錯誤往往會彈出。