2011-04-21 115 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'。这就是为什么当您在清单中设置权限时,这个错误往往会弹出。