1

我正在尝试为 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();
    }
}

我一直试图在某个地方找到它已修复的相同异常,但没有找到任何东西。

4

2 回答 2

1

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

于 2012-05-02T07:48:25.403 回答
0

可能是 Eclipse 没有正确构建包。当它发生在我身上时,完全相同的错误,我查找并轻松找到了解决方案。就我而言,我在YourProject->Properties->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>
于 2013-02-18T00:00:08.337 回答