无法实例化工具ComponentInfo

时间:2012-05-02 05:08:53

标签: java android junit manifest

我正在尝试为Android设置JUnit测试,我有清单和这样的设置,但我一直得到这个错误:

java.lang.RuntimeException: Unable to instantiate instrumentation ComponentInfo {com.example.Android/android.test.InstrumentationTestRunner}: java.lang.ClassNotFoundException: android.test.InstrumentationTestRunner in loader dalvik.system.PathClassLoader[/data/app/com.example.Android-1.apk:/data/app/com.example.Android-1.apk]

测试类:

  public class ConnectionToSiteTest extends AndroidTestCase{
    private final String emailUsername = "testUser@gmail.com";
    private final String password = "test";
    private final String features = "222222";
    private String commands;

    public void testCommandReturn(){
        requestToSite();

        assertEquals("222222", commands);
    }

    private void requestToSite(){
        try {
            // Create params for connection including 3sec timeout
            // on connection and 5sec timeout on socket
            HttpParams httpParams = new BasicHttpParams();
            int timeoutConnection = 3000;
            int timeoutSocket = 5000;

            // Set the timeouts
            HttpConnectionParams.setConnectionTimeout(httpParams,
                    timeoutConnection);
            HttpConnectionParams.setSoTimeout(httpParams, timeoutSocket);
            HttpClient httpClient = new DefaultHttpClient(httpParams);

            // Create the data entities
            HttpPost post = new HttpPost("http://example.com/AndroidCommands");
            HttpResponse response;

            // Set POST data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                    2);
            nameValuePairs.add(new BasicNameValuePair("emailUsername",
                    emailUsername));
            nameValuePairs.add(new BasicNameValuePair("password",
                    password));
            nameValuePairs.add(new BasicNameValuePair("features",
                    features));
            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Query the server and store the user's ID
            response = httpClient.execute(post);

            // Grabs the command string from response headers and processes them
            commands = (String) response.getHeaders("commands")[0].getValue();

        } catch (UnsupportedEncodingException e) {
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }
    }
}

的AndroidManifest.xml:

<uses-library android:name="android.test.runner" />
<instrumentation android:name="android.test.InstrumentationTestRunner"
   android:targetPackage="edu.neumont.MillerK.Android" android:label="Tests for My App" />
<activity
        android:name="com.example.Android.ConnectionToSiteTest">            
    </activity>

测试套件类:

    public class AllTests extends TestSuite {
    public static Test suite() {
        return new TestSuiteBuilder(AllTests.class).includeAllPackagesUnderHere().build();
    }
}

我一直试图找到同样的异常,它已被修复,但没有找到任何东西。

2 个答案:

答案 0 :(得分:1)

您确定测试是在正确的Android测试项目中吗?您可以通过右键单击项目在Eclipse中添加一个 - &gt; Android工具 - &gt;添加Android测试项目。您的所有测试都应放在该项目中。

答案 1 :(得分:0)

可能是Eclipse没有正确构建软件包。当它发生在我身上时,完全相同的错误,我查了一下并轻松找到了解决方案。 在我的情况下,我在 YourProject-&gt; Properties-&gt; Builders 下缺少 Android Package Builder 。 要再次添加它,我只是在Eclipse的.project文件中添加了几行(ApkBuilder)。您可以遇到其他问题,但请检查您的.project是否如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>xxx-it</name>
    <comment></comment>
    <projects>
        <project>xxx-project</project>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.ApkBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
    </natures>
</projectDescription>