Robotium测试用例作为一种方法

时间:2014-01-28 13:22:54

标签: java android eclipse junit robotium

作为一名没有深入了解java的技术测试人员,我有一个关于robotium和ActivityInstrumentationTestCase2的问题。我已经使用eclipse和robotium创建了一个测试用例。它可以工作,我可以作为junit测试以及从真实设备上的命令行执行它。

我现在想将这个robotium / solo测试用例移动到我们现有的测试框架中,其中每个类/测试用例都由“abstractchecker”扩展。以下是我们的一个Web测试用例的示例

package ipoMonitor.checkers;

import ipoMonitor.CheckInfo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import java.sql.Connection;
import static org.junit.Assert.assertTrue;

public class EmConsoleChecker extends AbstractChecker {

public EmConsoleChecker(CheckInfo curCheck, Connection con, WebDriver driver) {
    super(curCheck, con, driver);
}

@Override
public void runCheck() {
    curCheck.subCheckName = "Homepage";
    driver.get(curCheck.baseUrl);
    assertTrue(driver.findElement(By.cssSelector("BODY")).getText()
                       .matches("^[\\s\\S]*Login[\\s\\S]*$"));
    WriteLog(curCheck, con, " OK");
}

}

是否有可能保留此标准并将robotium测试类作为方法而不是类运行?如果是这样,代码将如何?

最初用extsolo录制的我的机器人测试用例看起来像这样

public class Test extends ActivityInstrumentationTestCase2<Activity> {

final String[] proj = {"*"};
private static final String LAUNCHER_ACTIVITY_CLASSNAME = "com.somecompany.androidsmsapp.MainActivity";
private static Class<?> launchActivityClass;
static {
    try {
        launchActivityClass = Class.forName(LAUNCHER_ACTIVITY_CLASSNAME);
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }
}
private Solo solo; 

@SuppressWarnings("unchecked")
public Test() {
    super((Class<Activity>) launchActivityClass);

}

@Override
public void setUp() throws Exception {
     solo = new Solo(getInstrumentation(), getActivity());      
}

@Override
public void tearDown() throws Exception {
    solo.finishOpenedActivities();
    super.tearDown();
}

public void testRecorded() throws Exception {
    try {

        Log.i("assert", "---------------NEW RUN-------------------");

            Log.i("assert", "Starting SendSMS");
        solo.waitForActivity("MainActivity");
        // Loads of solo commands executed here                 
        .....
        .....

    } catch (AssertionFailedError e) {
        throw e;
    } catch (Exception e) {
        throw e;
    }
}

}

我注意到在eclipse中创建robotium测试用例时,会自动添加库和类路径容器。有没有人有一个可以共享的工作示例或链接到一个?我在网上搜索了一段时间没有找到任何解决办法。任何帮助表示赞赏。

最诚挚的问候, 的Mattias

1 个答案:

答案 0 :(得分:1)

您的AbstractChecker正在Selenium testActivityInstrumentationTestCase2正在进行Android Instrument Test

根据您提供的信息,实际上不可能将两者结合起来,即使这样,我认为您不会得到您期望的结果。

您应该在AbstractChecker框架内查看并查看所需的功能。摘要并将其提取到一个类中,您可以将其用作ActivityInstrumentationTestCase2的组合。

Java does not support multiple inheritance因此你无法做到

Test extends AbstractChecker and ActivityInstrumentationTestCase2 {

良好的编程方法是prefer composition over inheritance,这样你就不会陷入困境,你可以撰写TestChecker的{​​{1}}。< / p>

TestCase为你here is the source做些什么并不是什么秘密。

如果你想考虑像下面这样的构图:

ActivityInstrumentationTestCase2

所以我很抱歉,但我认为您的问题的答案是否定的,但希望上面有一些关键字可以帮助您进行更多研究。