【问题标题】:Robotium test case as a methodRobotium 测试用例作为一种方法
【发布时间】:2014-02-19 19:40:38
【问题描述】:

作为对 java 没有任何深入了解的技术测试人员,我有一个关于机器人和 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录制的robotium测试用例是这样的

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 中创建一个 robotsium 测试用例时,会自动添加库和类路径容器。有没有人有一个他们可以分享的工作示例或一个链接?我已经在网上搜索了很长时间,但没有找到任何解决方案。任何帮助表示赞赏。

最好的问候, 马蒂亚斯

【问题讨论】:

    标签: java android eclipse junit robotium


    【解决方案1】:

    您的AbstractChecker 正在执行Selenium test,您的ActivityInstrumentationTestCase2 执行Android Instrument Test

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

    您应该查看AbstractChecker 框架,看看您想要什么功能。将其抽象并提取到一个类中,您可以将其用作 yourActivityInstrumentationTestCase2 的组合。

    Java does not support multiple inheritance 所以你不能这样做

    Test extends AbstractChecker and ActivityInstrumentationTestCase2 {

    一个好的编程方法是prefer composition over inheritance,这样你就不会陷入这种情况,你可以将你的Test组合成CheckerTestCase

    ActivityInstrumentationTestCase2 为您做了什么已经不是什么秘密了here is the source 看看。

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

    public class Test extends ActivityInstrumentationTestCase2 { // Forced extension due to library 
    
      private final Checker checker;
    
      public Test(){
        super((Class<Activity>) launchActivityClass);
        checker = SomeFactory.getChecker();
      }
    
      // do your tests and use your checker
    
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 2023-03-05
      • 2017-11-06
      • 1970-01-01
      相关资源
      最近更新 更多