没有二传手的模拟模型 object

Mock model object without setters

我正在对我的 Android 应用程序实施测试,我想对模型进行单元测试。问题是我没有设置器,因为模型是使用 Realm 创建的或通过解析 CSV 文件( univocity csv 解析器)创建的。 那么,我如何创建一个具有有效值的模拟 object 呢?我有这样的东西:

public class Content {

    private String title;
    private String description;

    ...
}

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

提前致谢

在测试中使用下面的代码 class:

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

yourObject 是您在测试 class.

中使用的 Content 的一个实例

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

一句警告:反射有很多缺点;例如,您的字段的简单名称更改将不会引起注意;并且不会导致编译器错误,但会导致以后的单元测试失败。

我建议一个不同的解决方案 - 提供一个包私有或受保护的构造函数,您可以使用它来初始化您的字段。然后你使用反射;同时,你的 "public" 接口 class 也没有改变,比如:

public class Content {

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

但是,当然,您必须进行平衡 - 要么添加生产不需要的构造函数;或者你使用不太健壮的反射代码!