没有setter的模拟模型对象

时间:2016-10-25 14:40:41

标签: android mocking mockito robolectric powermock

我在Android应用上实施测试,我想在模型上进行单元测试。问题是我没有设置器,因为模型是使用Realm创建的,或者是通过解析CSV文件(巫婆的univocity csv解析器)。 那么,我怎样才能创建一个具有有效值的模拟对象?我有类似的东西:

public class Content {

    private String title;
    private String description;

    ...
}

如何生成带有标题和描述数据的模拟内容对象?

提前致谢

2 个答案:

答案 0 :(得分:1)

在测试类中使用以下代码:

    Field field = Content.class.getDeclaredField("str");
    field.setAccessible(true);
    field.set(yourObject, "some value");

yourObject是您在测试类中使用的Content的实例。

但是你不应该填充模拟对象 - 你应该只为模拟对象定义方法结果。

答案 1 :(得分:0)

警告:反思有很多缺点;例如,您的字段的简单名称更改将被忽视;并且不会导致编译器错误,但会导致单元测试失败。

我建议使用另一种解决方案 - 提供一个包私有或受保护的构造函数,您可以使用它来初始化字段。然后你做来使用反射;同时,该类的“公共”界面也不会改变,例如:

public class Content {

  // unit testing only
  Content(String title, ... ) { ...

但是,当然,你必须做到平衡 - 你要么添加生产所不需要的构造函数;或者你没有那么强大的反射代码!