Java 如何抽象Robotium安装程序以运行多个测试文件

Java 如何抽象Robotium安装程序以运行多个测试文件,java,android,eclipse,robotium,Java,Android,Eclipse,Robotium,在黑盒测试环境中,我需要包含代码1并以代码2结束,以便通过运行Android JUnit测试来执行测试(如Robotium站点所述): 代码1: public class ConnectApp extends ActivityInstrumentationTestCase2 { private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.example.android.notepad.NotesList"; private

在黑盒测试环境中,我需要包含代码1并以代码2结束,以便通过运行Android JUnit测试来执行测试(如Robotium站点所述):

代码1:

public class ConnectApp extends ActivityInstrumentationTestCase2 {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.example.android.notepad.NotesList";
private static Class<?> launcherActivityClass;
private Solo solo;
static { 
    try { launcherActivityClass=Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME); }
    catch (ClassNotFoundException e) { throw new RuntimeException(e); }
}
public ConnectApp() throws ClassNotFoundException {
    super(launcherActivityClass);
}
public void setUp() throws Exception {
    this.solo = new Solo(getInstrumentation(), getActivity());
}
public void testNumberOne() { … }
public void testNumberTwo() { … }

}
但是,我想抽象代码的代码1(包括getInstrumentation()和getAcitvity()),这样我就可以在单独的测试文件中调用它们,然后运行代码2。这是因为我希望在单独的文件中进行测试,不希望继续添加相同数量的代码1代码,而只是调用一个方法/构造函数来启动该过程


有办法做到这一点吗?提前谢谢。

是的,有办法做到这一点。您需要做的是创建一个空的测试类,例如:

public class TestTemplate extends ActivityInstrumentationTestCase2 {

    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.example.android.notepad.NotesList";
    private static Class<?> launcherActivityClass;
    private Solo solo;

    static { 
        try { launcherActivityClass=Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME); }
        catch (ClassNotFoundException e) { throw new RuntimeException(e); }
    }
    public ConnectApp() throws ClassNotFoundException {
        super(launcherActivityClass);
    }

    public void setUp() throws Exception {
        super.setUp();//I added this line in, you need it otherwise things might go wrong
        this.solo = new Solo(getInstrumentation(), getActivity());
    }

    public Solo getSolo(){
        return solo;
    }
}

您的意思是将“connectApp()”构造函数更改为“TestTemplate()”吗?如果不是,我会得到“隐式超级构造函数ActivityInstrumentationTestCase2未定义…”的错误,但是如果我按照我说的做,那么在测试中扩展TestTemplate会给我“默认构造函数无法处理异常类型ClassNotFoundException”。我该怎么办,对不起,我是新手,再次提前感谢你我已经编辑了我的答案,希望这能解决你的问题!如果它不让我知道问题是什么。
public class ActualTest extends TestTemplate {
    public ActualTest() throws ClassNotFoundException {
    super();
}

    public void setUp() throws Exception {
        super.setUp();
        //anything specific to setting up for this test
    }

    public void testNumberOne() { … }
    public void testNumberTwo() { … }
}