2015-08-18 186 views
0

所以我有这个运行良好的Splash屏幕,但我想测试“是处理程序已经发起了下一个活动”。 类:Android测试初始屏幕

public class SplashActivity extends Activity { 
private final int SPLASH_DISPLAY_LENGTH = 3000; 
private TextView quote_text; 

private int[] quote_id = {R.string.quote_1, R.string.quote_2, R.string.quote_3, R.string.quote_4, R.string.quote_5}; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splashscreen); 

    quote_text = (TextView) findViewById(R.id.quote_text); 

    int idx = new Random().nextInt(quote_id.length); 
    int selectedID = (quote_id[idx]); 
    quote_text.setText(getResources().getText(selectedID)); 

    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); 
      SplashActivity.this.startActivity(mainIntent); 
      SplashActivity.this.finish(); 
     } 
    }, SPLASH_DISPLAY_LENGTH); 
} } 

Robolectric: 测试,这是失败在
的assertEquals(expectedIntent,shadowOf(活性).getNextStartedActivity());

@Test 
    public void testNextActivityWasLaunchedWithIntent() { 
     SplashActivity activity =  Robolectric.buildActivity(SplashActivity.class).create().start().resume().get(); 
     assertNotNull("MainActivity is not instantiated", activity); 

    synchronized (this) 
    { 
     try { 
      this.wait(3200); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    Intent expectedIntent = new Intent(activity, MainActivity.class); 
    assertNotNull(expectedIntent); 

    assertEquals(expectedIntent,shadowOf(activity).getNextStartedActivity()); 
} 

谁能告诉我请,我怎么能测试中,处理程序解雇我的下一个活动? 非常感谢!

回答

1

这是可以通过一些流行的单元测试框架,你可以用来检查开始正确的意图。请参阅Robolectric的以下文档。

http://robolectric.org/writing-a-test/

Intent expectedIntent = new Intent(activity, WelcomeActivity.class); 
assertThat(shadowOf(activity).getNextStartedActivity()).isEqualTo(expectedIntent); 
+0

嘿Durgesh,我已经更新了我的答案,pelase评论。谢谢 – Karoly

0

我能够做成功测试闪屏在我的应用程序如下:

public void test(){ 
ActivityController<SplashScreen> controller = Robolectric.buildActivity(SplashScreen.class).create().start(); 
ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); 

SplashScreen splashScreenActivity = controller.get(); 
Intent expectedIntent = new Intent(splashScreenActivity, PrimeiroAcessoActivity.class); 

assertEquals(expectedIntent,shadowOf(splashScreenActivity).getNextStartedActivity());} 

在我看来,你错过了ShadowLooper.runUiThreadTasksIncludingDelayedTasks()线。需要运行Handler.postDelayed内部的代码,如this StackOverflow post中所述。