创建一个调用构造函数的mock

时间:2015-04-29 13:35:23

标签: java unit-testing easymock

假设我有以下课程:

class Person {
  private String name;
  private Integer id;
  public Person(String name){
     this.name=name;
     this.id=random();
  }

  int random() {
     return new Random().nextInt();
  }
}

通过使用模拟Person方法调用构造函数,可以为random()类创建部分模拟吗? 我的意思是这样的:

Person a=EasyMock.createMockBuilder(Person.class)
                  .withConstructor(String.class)
                  .withArgs("Albina")
                  .addMockedMethod("random")
                  .createMock();

1 个答案:

答案 0 :(得分:2)

我会采用不同的方式:使用依赖注入来"插入"随机对象:

public Person(Random rand, String name) { this.random = rand ...

public Person(String name) { this(new Random(), name) ...

然后你可以创建你班级的普通对象;这将使用模拟随机。

很多时候,我们会考虑"复杂"解决方案以某种方式测试我们的生产代码但这是错误的做法:如果你的代码难以测试;然后改变你的代码!