没有二传手的模拟模型 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, ... ) { ...
但是,当然,您必须进行平衡 - 要么添加生产不需要的构造函数;或者你使用不太健壮的反射代码!
我正在对我的 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, ... ) { ...
但是,当然,您必须进行平衡 - 要么添加生产不需要的构造函数;或者你使用不太健壮的反射代码!