【发布时间】:2015-09-03 15:02:25
【问题描述】:
这是我试图实现的结果的略微简化版本,但我认为它说明了问题。
假设我有以下两个类,其中一个是另一个的后代:
public class Vehicle {
protected String name;
{
name = "Vehicle";
}
public String getName() {
return name;
}
}
public class Car extends Vehicle {
{
name = "Car";
}
}
我也有这个测试代码:
public class VehiclesTest {
@Test
public void checkVehicles(@Mocked final Vehicle vehicleMock,
@Mocked final Car carMock) {
new Expectations() {
{
vehicleMock.getName(); result = "mocked vehicle";
carMock.getName(); result = "mocked car";
}
};
Vehicle aVehicle = new Vehicle();
System.out.println("Starting a " + aVehicle.getName());
Vehicle aCar = new Car();
System.out.println("Starting a " + aCar.getName());
}
}
我想要在控制台输出上看到的是:
启动模拟车辆 启动模拟汽车然而,实际的输出看起来像这样:
启动模拟汽车 启动模拟汽车我是 JMockit 的新手,所以我认为我知道为什么会发生这种情况(这是因为 JMockit 会在类层次结构中一直模拟模拟的所有祖先类,不包括java.lang.Object)。
如何设置我的期望,以便获得我想要的结果?是否可以对同一层次结构中不同类的多个模拟设置期望(即其中一个是另一个的后代)?
【问题讨论】: