0

我想从 servlet 运行/启动 AVD。我有一堂课,

class A extends ActivityInstrumentationTestCase2{ 

    // all the relevant function for launching the ADV and execution of test steps in android app.

}

当我作为 Android JUnit Test 运行时,这个类工作正常。但我想从 servlet 调用/运行这个类。

喜欢:我有一个 servlet,

B extends HttpServlet {

    doPost() {
        A obj = new A();
        obj.somemethod()  which launch the ADV or open the application.
    }
}  

但是当我从 servlet 执行它时,我得到了异常

java.lang.NoClassDefFoundError: android/test/ActivityInstrumentationTestCase2
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(Unknown Source)
java.lang.ClassLoader.defineClass(Unknown Source)
java.security.SecureClassLoader.defineClass(Unknown Source)
                                                                                         org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
com.web.evernote.ui.bean.ExecuteTestCases.doPost(ExecuteTestCases.java:83)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

任何人都可以帮助我解决这个问题......

基本上我想运行广告然后打开记事本之类的活动并想要执行测试....

4

1 回答 1

0

您可能想使用 ADB 命令来启动模拟器,在 somemethod() 函数中,您需要这样的东西:

strCommand.append(ADB_PATH + "adb -s "+simulatorName+" shell am instrument ");;
strCommand.append("-w ");
strCommand.append(instrumentationPath); 
try
{
    p = Runtime.getRuntime().exec(strCommand.toString());
    p.waitFor();
}
catch(Exception e)
{
    e.printStackTrace();
}

上面的例子在模拟器上启动了一个测试用例。这里 strCommand 是 StringBuilder 的一个实例。ADB_PATH 是一个存储 adb 路径的变量。您需要做的是更改启动模拟器的命令。像这样的东西

adb shell am start -a android.intent.action.MAIN -n org.sample.helloworld/org.sample.helloworld.HelloWorld。

于 2013-07-30T11:14:35.460 回答