gpt4 book ai didi

java - Robotium 测试用例作为一种方法

转载 作者:行者123 更新时间:2023-11-30 03:08:19 26 4
gpt4 key购买 nike

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

我现在想将这个 robotium/solo 测试用例移动到我们现有的测试框架中,其中每个类/tescase 都由“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测试用例时,会自动添加库和类路径容器。有没有人有一个他们可以分享的工作示例或一个链接?我已经在网上搜索了很长时间,但没有找到任何解决方案。感谢您的帮助。

最好的问候,马蒂亚斯

最佳答案

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

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

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

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

测试扩展了 AbstractChecker 和 ActivityInstrumentationTestCase2 {

一个好的编程方法是prefer composition over inheritance , 这样你就不会陷入这种情况,你可以编写 CheckerTestCaseTest

ActivityInstrumentationTestCase2 为您做了什么已经不是什么 secret 了 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

}

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

关于java - Robotium 测试用例作为一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com