- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Android 中使用旧的 JUnit3 样式测试,我可以执行以下操作来销毁并重新启动 Activity :
Instrumentation inst = getInstrumentation();
Activity activity = inst.getActivity();
// do something
activity.finish();
Assert.assertTrue(this.activity.isFinishing());
activity = inst.getActivity();
// assert that activity's state is restored
如何使用新的测试支持库完成同样的事情?我可以使用 Espresso 和/或 UI Automator 或新库提供的任何其他机制。
更新:
我尝试了以下方法:
Activity activity = activityTestRule.getActivity();
// do something
activity.finish();
Assert.assertTrue(this.activity.isFinishing());
activity = activityTestRule.getActivity();
// assert that activity's state is restored
但是,ActivityTestRule.getActivity()
似乎没有重新启动 Activity 。
最佳答案
正如@CommonsWare 提到的,自定义规则非常有用。这是我的简单解决方案(可以进行许多改进,但这只是一个可以构建的快速框架):
public class ControlledActivityTestRule<T extends Activity> extends ActivityTestRule<T> {
public ControlledActivityTestRule(Class<T> activityClass) {
super(activityClass, false);
}
public ControlledActivityTestRule(Class<T> activityClass, boolean initialTouchMode) {
super(activityClass, initialTouchMode, true);
}
public ControlledActivityTestRule(Class<T> activityClass, boolean initialTouchMode, boolean launchActivity) {
super(activityClass, initialTouchMode, launchActivity);
}
public void finish() {
finishActivity();
}
public void relaunchActivity() {
finishActivity();
launchActivity();
}
public void launchActivity() {
launchActivity(getActivityIntent());
}
}
注意,如果你这样做,这个类需要在包android.support.test.rule
中才能访问包私有(private)方法ActivityTestRule#finishActivity
.然后在您的测试用例中,实现此规则:
@Rule
public ControlledActivityTestRule<TestFountainPreferenceActivity> actRule = new ControlledActivityTestRule<>(TestFountainPreferenceActivity.class);
然后在您的个人测试用例中,调用 actRule.finish()
和 actRule.launchActivity()
终止并重新启动它。或者,如果您在终止它和重新启动它之间不需要做任何事情,您可以调用 actRule.relaunchActivity()
。注意,如果你有初始启动,你可以传递第三个参数false
来延迟启动activity,然后调用actRule.launchActivity()
让它运行,但是你会对一些内置句柄的松散访问,例如 #afterActivityLaunched
和 #afterActivityFinished()
。
关于android - 使用测试支持库销毁并重启 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306423/
我很好奇为什么 Start-Job 会成倍增加。我担心的是我做错了什么,使新工作的 ID 跳了 2。 Start-Job -ScriptBlock {Get-WinEvent -LogName sys
有没有办法为 Start-Job 命令指定工作目录? 用例: 我在一个目录中,我想使用 Emacs 打开一个文件进行编辑。如果我直接执行此操作,它将阻止 PowerShell,直到我关闭 Emacs。
我正在尝试在 PowerShell 2.0 中执行基本的后台作业,并且我在 start-job 和 invoke-command -asjob 中看到了不同的东西。 如果我这样做: start-job
我正在尝试通过 Jenkins DSL 启动一个项目,但不需要等待它完成。基本上我希望它能够启动一项孤儿工作。 node("slave-node") { // Launch pipeline
我正在尝试在 OS X Mountain Lion 10.8.3 中安排一个简单的任务 launchctl start nextstopsun.helloworld 命令不执行脚本并向控制台抛出消息
我在Hadoop集群上运行MRJob,并且出现以下错误: No configs found; falling back on auto-configuration Looking for hadoop
我已经能够很好地使用 elastic-mapreduce ruby 库启动工作流程。现在我有一个实例在它的工作完成后仍然“活着”。我已经使用 SSH 登录并想开始另一项工作,但是我的各种尝试都失败
我是 hadoop 和 mrjob 的新手,这本书对我的学习帮助很大。我试图在 hadoop 上运行 mrSVM.py,因为它在本地运行良好。 但我运行了以下命令:python mrSVM.py -r
我有一个简单的 Powershell 脚本(正在 Octopus 部署的一个步骤中运行),我正试图以另一个用户的身份运行它。我们在以后的步骤中需要它(我们平台上的每个应用程序都以其自己的用户帐户运行,
我目前正在尝试使用 powershell 构建一个从 IIS 启动的线程清理脚本。我使用 powershell 远程处理创建了一个线程“由所有者终止进程”,从与我的清理脚本相同的服务器列表运行,并且没
我是一名优秀的程序员,十分优秀!