【问题标题】:Roboelectric : How to resolve depended objectRobolectric:如何解决依赖对象
【发布时间】:2018-06-27 19:55:05
【问题描述】:

我有一个活动,我正在使用 Roboelectic 框架测试它的一种方法,但我得到空指针异常。

下面是测试代码

@Test
public void processTest() throws Exception {
 MyActivity activity = Robolectric.setupActivity(MyActivity.class);

activity.setValue();
tView = (TextView) activity.findViewById(R.id.text);
assertEquals(“1”,tView.getText().toString());
}

下面是activity的setValue方法

public class MyActivity extends AppCompatActivity {

TextView tView;

@Inject Student s;

@Override
public void onCreate() {
    tView = (TextView) activity.findViewById(R.id.text);
}

public void setValue() {
    String id = s.getId();
    tView.setText(S);
}

当我运行测试时,String id = s.getId(); 行出现空指针错误

我知道s 为空。但我的问题是如何在不使用 Mokito 的情况下使用 Roboelectric 进行测试?

【问题讨论】:

    标签: android unit-testing robolectric


    【解决方案1】:

    您确定您粘贴的代码与运行时完全相同吗? onCreate应该有Bundle的参数,并且在你做findViewById之前activity没有调用setConentView,还有一些其他的问题......

    一般来说,由 Robolectric.setupActivity 构建的 Activity 应该可以在测试用例的其余部分中使用,并且在返回之前应该已经执行了 onCreate(Bundle)。

    【讨论】:

    • 这只是示例代码,不是真实的。主要问题是对象没有在 oncreate 或该方法中初始化。那是在其他地方初始化。请查看我的编辑。我只是想在测试之前用一些假日期进行初始化,因为我正在单独测试该方法。
    • @MKY 我尝试构建这样的测试。它对我有用。 (使用 Robolectric 3.8)gist.github.com/hkhc/b787cf607e177d54253e36c6eb15ba54
    • 假设学生是接口,我在其他类的某个地方实现了,我已经注入了学生,我想对其进行操作和测试。有什么办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多