2014-01-28 40 views
1

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

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

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中创建一个robotium测试的情况下,有库和自动添加类路径容器。有没有人有他们可以共享的工作示例或链接到一个?我在网上搜索了一个looooooooong时间,但没有找到任何解决办法。任何帮助表示赞赏。

最好的问候, 马蒂亚斯

回答

1

AbstractChecker正在做Selenium test,你ActivityInstrumentationTestCase2做一个Android Instrument Test

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

你应该看看AbstractChecker框架,看看你想要什么功能。摘要并将其提取到可用作ActivityInstrumentationTestCase2的组合的类中。

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 

} 

所以我很抱歉,但我想回答你的问题是没有,但希望有在上面的一些关键字,以帮助您研究更多。