在JUnit测试中使用setter而没有类中的一个

时间:2016-07-14 08:33:43

标签: java spring testing junit

假设我有一个名为Foo的实体idname(简化了类):

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只会来自DB。所以我没有为它创建一个setter。

现在我想要JUnit测试一些我希望实例化foo的方法。是否有可能仅为JUnit测试设置id

P.S。:一种可能的解决方案是首先从数据库接收foo并进行测试。但是想避免DB调用。如果有必要,我会使用Springjpa

1 个答案:

答案 0 :(得分:1)

感谢JS Bin Demonstration。简单而完美的解决方案是使用ReflectionTestUtils

@Test
public void testFoo() {
  Foo foo = new Foo();
  ReflectionTestUtils.setField(foo, "id", 1L);
  // assertion
}

请注意:ReflectionTestUtils来自Spring:org.springframework.test.util.ReflectionTestUtils