创建一个调用构造函数的模拟
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" 解决方案来以某种方式测试我们的生产代码。但这是错误的做法:如果你的代码很难测试;然后更改您的代码!
假设我有以下 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" 解决方案来以某种方式测试我们的生产代码。但这是错误的做法:如果你的代码很难测试;然后更改您的代码!