- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试测试两个不同的 Activity
类,其中一个 Activity
恰好调用另一个。这是我的代码,然后我将解释问题:
介绍 Activity 测试
public class IntroActivityTest extends ActivityInstrumentationTestCase2<IntroActivity> {
IntroActivity activity;
public IntroActivityTest() {
super( IntroActivity.class );
}
@Override
protected void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
public void testIntroBypass() {
if ( new SharedPreferencesHelper( getInstrumentation().getTargetContext() ).retrieveUserToken() == null ) {
assertTrue( !activity.isFinishing() );
}
else {
assertTrue( activity.isFinishing() );
}
}
}
根 Activity 测试:
public class RootActivityTest extends ActivityInstrumentationTestCase2<RootActivity> {
RootActivity activity;
public RootActivityTest() {
super( RootActivity.class );
}
@Override
protected void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
public void testInitialTab() {
assertTrue( activity.getSupportActionBar().getSelectedTab().getText().toString().equalsIgnoreCase( "Library" ) );
}
}
在 IntroActivityTest
中,如果来自 SharedPreferences
的用户 token 不为空,它会立即启动 RootActivity
。如果它为 null,它将停留在 IntroActivity
上。问题是,如果它是非空的,第一个测试 (IntroActivityTest
) 通过,然后它卡在 RootActivityTest< 中的
并且测试只是卡住......没有异常(exception),它只是卡在那条线上。如果用户 token 为 null,它会完全正常地运行这两个测试。getActivity()
方法调用上
这可能是什么原因造成的?根据观察,RootActivityTest
似乎正在尝试使用从 IntroActivity
启动的 RootActivity
,但它不应该启动自己的实例吗RootActivity
?
最佳答案
根据ActivityInstrumentationTestCase2 API :
This class provides functional testing of a single activity. The activity under test will be created using the system infrastructure (by calling InstrumentationTestCase.launchActivity()) and you will then be able to manipulate your Activity directly.
每个 ActivityInstrumentationTestCase2 实现都是完全隔离的,并且有自己的生命周期,不依赖于其他 ActivityInstrumentationTestCase2 实现。可测试的 Activity 必须始终通过检测基础设施创建,而不是从被测应用程序本身创建。在您的情况下,RootActivityTest 不会从应用程序和针对 RootActivity 的持续运行测试中获取由 IntroActivity 启动的 RootActivity。如果有一个 RootActivity 不知从何而来(不是由 InstrumentationTestRunner 产生)并被带到前面,当运行 RootActivityTest 时,InstrumentationTestRunner 会在尝试创建可测试的 RootActivity 时感到困惑,并简单地停止并等待这个陌生人被杀死。
要测试您想要的,即 如果来自 SharedPreferences 的用户 token 不为空,它会立即启动 RootActivity。如果为空,则保留在 IntroActivity 上,您可以在 IntroActivityTest 中编写所有内容并使用 Instrumentation.ActivityMonitor从 IntroActivity 开始检测 RootActivity。查看here对于代码示例。请注意,您需要在 IntroActivityTest 中完成测试后完成 RootActivity,以便在 RootActivityTest 中调用 getActivity() 时 RootActivity 可以正常启动。
使用 RootActivityTest 来测试与 RootActivity 相关的一切,在 RootActivity 启动并被带到前面后,例如,TextView 呈现良好,按钮点击做正确的事情等等。在 RootActivityTest 中,您不需要关心在哪里以及如何RootActivity 已启动,只需调用 getActivity() 并向仪器询问可测试的 RootActivity。
关于android - getActivity() 方法在单元测试时无限期阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785239/
我正在对用 Java 语言编写的程序进行逆向工程。到目前为止,一切都很有意义,除了一段我根本无法理解的代码。该程序本身是流行游戏Minecraft的服务器,尽管我强烈认为这个问题与其本身无关。让我向您
在 Python 的时间模块中,有一个 sleep() 函数,可以让 Python 等待 x 秒后再继续执行程序。有没有办法无限期地执行此操作直到满足条件?例如: while True: ti
我有一个 php 脚本,它可能需要 2 到 10 分钟才能执行。它从网络上获取信息,因此它的时间取决于许多其他事物的通话速度。 我曾经每 15 分钟在 cron 上运行一次脚本,但有时只需要 2 分钟
我运行 Mac OSX 10.7 和 Xcode 4.2.1,一切都很好,直到几个小时前,当我尝试运行模拟器时,我的 xcode 突然挂起!这是发生了什么 代码构建成功,但它无限期地显示“Attach
我目前正在阅读 Ivor Horton 的 Beginning C。无论如何,我不确定的 for 在继续之前打印了我的 printf 语句两次。我确定我做错了什么,但我直接从书中复制了代码。如果重要的
我正在使用一个在下面设置 session 变量/cookie 的登录系统。 Chrome,它可以让你轻松地查看你的 cookie,显然将其标记为“当我关闭浏览器时”过期的 PHPSESSID。果然,当
任务是:尝试使用最基本的形式(如“ping 8.8.8.8”)在 python 中发送 ping。一段时间后终止 ping 命令(在终端中,将执行 Ctrl+C)并获得其输出。显示 ping 统计信息
我是一名优秀的程序员,十分优秀!