0

请帮助我意识到我和我的代码有什么问题。简单的例子:

public class RollingStockCreation {
@Mocked Plant plant;
@Mocked RollingStock rollingStockMock;
@Mocked WrenchManagerInjection wm;


@Test
public void rollingStockCreationWithTwoMocks(){

    new Expectations(){
        {
            wm.getCar();
            result = new Delegate() {
            Cargo delegate(){
                return new Cargo(4,55.3);
            }
        };
        }
    };
    Assert.assertEquals(wm.getCar().getChassisCount(),4);
}

}

public class Cargo extends RollingStock {
protected String cargoType;
public Cargo(int chassisCount, double maxWeight){
    this.chassisCount = chassisCount;
    this.maxWeight = maxWeight;
}

public String getCargoType() {
    return cargoType;
}

public void setCargoType(String cargoType) {
    this.cargoType = cargoType;
}

}

public abstract class Plant {
RollingStock rollingStock;
public RollingStock construct(RollingStock rollingStock){
    this.rollingStock = rollingStock;
    return rollingStock;
}

}

public class WrenchManagerInjection {
Plant plant;
RollingStock rollingStock;

@Inject
public WrenchManagerInjection(Plant plant, RollingStock rollingStock) {
    this.plant = plant;
    this.rollingStock = rollingStock;
}

public RollingStock getCar() {
    return plant.construct(rollingStock);
}

public static RollingStock getCar(Plant plant, RollingStock rollingStock) {
    return plant.construct(rollingStock);
}

}

我只需要返回模拟对象执行的真实结果。我试图使用委托、简单的结果 = 选项和返回(),但当我期望 4 和 55.3 时,它总是返回 0、0.00。我试图一个一个地模拟所有依赖项,模拟上层等等......我这样做只是为了学习,所以如果它在概念上错误,请告诉我。我当前的目标是 moke 所有依赖项并在执行期间返回 Cargo(4,55.3)。预先感谢。

4

1 回答 1

1

它没有显示,但我假设类 RollingStock 定义了方法 getChassisCount() 和字段 chassisCount 和 maxWeight。

您的模拟不起作用,因为您在测试开始时模拟了 RollingStock:@Mocked RollingStock rollingStockMock;

因此,当您的测试调用 car.getChassisCount() 时,您正在调用一个模拟方法,并且您将获得返回 int 的方法的默认返回值,即 0。删除此模拟将使您的测试通过。

请注意,您混淆了 Assert.equals 参数。期望值应该是第一个参数,第二个应该是实际参数。这将使失败的测试用例更容易理解。

于 2013-10-15T17:01:08.787 回答