Android中的机器人分子:测试事件?

Android中的机器人分子:测试事件?,android,robolectric,Android,Robolectric,我已经用robolectric编写了一些测试,现在我想做一些真正的测试类 我注意到的一点是,我无法测试onCreate、onLocationChanged等事件 测试活动的标准做法是什么 我应该提取事件中的代码并将它们放在一个方法中,事件将调用该方法,robolectro也可以调用该方法,当然该方法需要是公共的,对吗 另外,如果我想在我的方法中测试一些通常是私有变量的东西,那么我需要添加一个公共getter,对吗?我能从robolectric查一下吗 有没有更好的方法将数据公开给robolect

我已经用robolectric编写了一些测试,现在我想做一些真正的测试类

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

测试活动的标准做法是什么

我应该提取事件中的代码并将它们放在一个方法中,事件将调用该方法,robolectro也可以调用该方法,当然该方法需要是公共的,对吗

另外,如果我想在我的方法中测试一些通常是私有变量的东西,那么我需要添加一个公共getter,对吗?我能从robolectric查一下吗


有没有更好的方法将数据公开给robolectric?

在测试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的第二版开始,这不是现在开始活动的正确方式:

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真正的新功能。

您解决了这个问题吗?如果是,请选择一个答案。