我正在尝试为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();
}
}
我一直试图找到同样的异常,它已被修复,但没有找到任何东西。
答案 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>