AndroidJUnit4测试在调试中传递,无法在运行中启动

时间:2016-12-18 21:35:36

标签: android unit-testing

我在JUnit4中遇到了我的活动的单元测试问题。该应用程序是一款游戏,所以主要的游戏活动相当复杂。我想测试一旦启动和取消暂停(默认情况下它以暂停模式启动)游戏运行5秒而不会崩溃。我认为这是一个过时的运行。

活动的onCreate在单独的线程中做了一些相对繁重的工作,我需要等待,直到它完成为止。下面的代码说明了测试用例。

@RunWith(AndroidJUnit4.class)
public class GameTest {
    @Rule
    public ActivityTestRule<GameActivity> mActivityRule =
                new ActivityTestRule<>(GameActivity.class, true, false);

    @Before
    public void launchActivity() throws Throwable {
        Intent intent = new Intent();
        /* ... skipped building intent ... */
        mActivityRule.launchActivity(intent);

        // wait till the constructors finish
        while (!mActivityRule.getActivity().gameLoopStarted) {
            Thread.sleep(10);
        }
    }

    @Test
    public void gameRunsFor5sec() throws Throwable {
        mActivityRule.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // unpause
                mActivityRule.getActivity().playPause(null);
            }
        });            

        Time t = Time.getCurrent();
        // wait 5 secs before considering the test passed
        while (Time.getCurrent().since(t).getMillis() < 5000) { }
    }
}

我遇到的问题是测试总是在Android Studio的debug模式下通过,无法在run模式下正常启动;在debug中,加载活动需要大约100-200ms(Thread.sleep循环),游戏取消暂停,5秒后测试结束。在run中,游戏的加载方式与debug相同,但随后不会暂停,并且测试在45秒后超时。例如,该活动完全起作用,可以手动取消模拟器上的游戏并播放。我以前尝试过不同的方法,比如静态5秒而不是检查gameLoopStarted标志,但结果是一样的。

0 个答案:

没有答案