【发布时间】:2016-07-14 08:33:43
【问题描述】:
假设我有一个名为 Foo 的实体,带有一个 id 和一个 name(简化了类):
public class Foo {
private long id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
}
在我的应用程序中,我不希望在任何地方手动设置 id。因为foo 只会来自数据库。所以我没有为它创建一个setter。
现在我想要 JUnit 测试一些我想要实例化 foo 的方法。是否可以为 JUnit 测试设置 id?
P.S.:一个可能的解决方案是先从数据库接收foo 并进行测试。但要避免 DB 调用。如果有必要知道,我正在使用Spring 和jpa。
【问题讨论】:
-
ReflectionTestUtils.setField(foo, "id", 1L);类似的东西。 -
如果你使用 jpa 接收数据,你也需要一个 setter
-
使用 JPA 时不需要设置器。这取决于您使用的模式(基于字段或属性)。
-
您可以使用反射(搜索关键字,您会发现大量信息)或者您可以扩展您的类,创建自己的构造函数并覆盖
getId()。另见how-to-test-a-class-that-has-private-methods-fields-or-inner-classes -
@M.Deinum 谢谢。完美而简单的解决方案。以前从未听说过
ReflectionTestUtils。如果你想提供答案,我会接受你的。