我需要测试类SportCar,它扩展了汽车的代码。问题是,当我创建我的对象在测试JMockit:如何避免超的构造
SportCar car = new SportCar();
它还将从父类,例如Car()调用构造函数。这些构造函数做了很多事情,有很多环境依赖关系,并且需要很多我没有的配置文件,所以我想创建一个SportCar实例而不调用继承的构造函数。
我知道这个问题的唯一解决方案是创建一个样机的汽车中,我改写的构造函数($ INIT)和静态块($ clinit)。但现在我的问题是,如果我的层次结构中存在许多类(SportCar扩展Car,扩展了扩展B的C继承扩展C ...),我想避免所有构造函数,会发生什么?我应该为所有以前的课程创建Mocks吗?
class A extends B{
public A(){
// Plenty of things to avoid during tests
}
}
class Car extends A{
public Car(){
// Plenty of things to avoid during tests
}
}
class SportCar extends Car(){
}
如果你想有一个类跑车不具备汽车类的所有行李,然后没有从车,就这么简单继承。我觉得Car应该不是一个班级,而是一个界面。 – 2012-02-03 13:22:20
同意@Hovercraft在这种情况下,继承是邪恶的。改用组合,并实现接口。如果你想“共享逻辑”为所有的汽车,把它在你注入SportCar(和取其他车需要它)的合作者对象 - 你可以有一个合作者对象的多种实现,这将实现相同的功能,你具有继承性,但以更简洁的方式 - 使测试更容易,这通常是良好设计的良好指标。 – Guillaume 2012-02-03 13:30:20
这是旧代码,我不能改变,但无论如何,我不是说SportCar不需要Car的构造函数的继承代码。我只是表示我不想在测试期间调用此代码。我的意思是,SportCar需要继承Car的构造函数中的代码,但因为我想要一个单独的(单元)测试,所以我不想在测试过程中调用很多类。无论如何,我知道设计很糟糕:在构造函数中有这样的事情。有这么多的依赖关系... – 2012-02-03 13:41:46