2012-07-24 52 views
8

我已经使用robolectric写了一些测试,现在我想要做一些真正的测试课程。Robolectric(android):测试事件?

一个我注意到的是,我无法测试样的onCreate事件,onLocationChanged等

什么是标准的做法,用于测试活动...

我应该提取里面的代码多数民众赞成事件并将它们放在一个方法中,事件会调用该方法,而且robolectro可以调用该方法,当然该方法需要公开,对吗?

此外,如果我想在我的方法中测试一些通常是私有变量的东西,那么我需要添加一个公共getter,对吧?所以我可以从robolectric检查这个?

有没有更好的方法将数据暴露给robolectric?

在此先感谢。

+0

您是否解决了这个问题?如果是这样,请选择一个答案。 – 2015-05-18 17:12:34

回答

7

当测试onCreate时,我得到robolectric来调用onCreate,然后在onCreate之后测试活动是否处于正确的状态。 下面是一个例子:

@RunWith(RoboTestRunner.class) 
public class DashboardActivityTest { 

    private DashboardActivity activity; 

    @Before 
    public void setUp() throws Exception { 
     activity = new DashboardActivity(); 
    } 

    @After 
    public void tearDown() throws Exception { 
    } 

    @Test 
    public void testDashboardHasButtons() { 
     activity.onCreate(null); 
     Button btn1= (Button) activity.findViewById(R.id.btn1); 
     assertNotNull(btn1); 
     Button btn2= (Button) activity.findViewById(R.id.btn2); 
     assertNotNull(btn2); 
    } 
} 

测试私有方法通常表明你的设计可以改进,而不是一个Robolectric特定问题。

见很多讨论这个问题: How do I test a class that has private methods, fields or inner classes?

6

由于Robolectric的V2,这是不是从现在开始的活动的正确方法:

MyActivity testActivity = new MyActivity(); 
testActivity.onCreate(null); 

现在的正确方法是使用:

MyActivity testActivity = Robolectric.buildActivity(MyActivity.class).create().get(); 

这将给你一个调用onCreate后的活动的实例。
如果你想测试onStart,onResume,onPause等,它是一样的方法,只是更多的方法。

MyActivity testActivity = Robolectric.buildActivity(MyActivity.class).create().start().resume().pause().stop().destroy().get(); 

(添加或删除的代码行以上的方法来测试你想要的活动的确切实例)

只是想澄清Robolectric的真正新的不错的功能。