创建一个调用构造函数的模拟

Create a mock calling a constructor

假设我有以下 class:

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

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

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

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

我会做不同的事情:使用依赖注入 "insert" 随机对象:

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

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

然后你可以为你的class创建一个普通对象;这将使用模拟的 Random.

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