2013-10-15 3 views
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); 
} 

}

내가 필요로하는 것은 조롱 된 객체의 실제 실행 결과를 반환하는 것입니다. 나는 위임자를 사용하려고했는데, 간단한 결과 = 옵션과 returns()하지만 항상 4와 55.3을 기대할 때 0, 0.00을 반환합니다. 나는 모든 의존성을 하나씩 모의하려고 애썼다. 상위 레벨을 모의하고 그렇게했다. ... 나는 단지 학습을 위해서 그렇게한다. 개념적으로 잘못하면 가르쳐 줘. 나의 현재 목표는 모든 종속성을 모크 화하고 실행 중에 Cargo (4,55.3)를 반환하는 것입니다. 감사합니다.

답변

1

표시되지 않지만 클래스 RollingStock이 getChassisCount() 메소드 및 chassisCount 및 maxWeight 필드를 정의한다고 가정합니다.

테스트 시작시 RollingStock을 조롱했기 때문에 귀하의 모의이 작동하지 않습니다. @Mocked RollingStock rollingStockMock;

테스트에서 car.getChassisCount()를 호출하면 조롱 된 메소드가 호출되고 int (0)를 리턴하는 메소드의 기본 반환 값을 얻게됩니다. 이 조롱을 제거하면 테스트를 통과 할 수 있습니다 .

Assert.equals 매개 변수가 혼합되어 있습니다. 기대 값은 첫 번째 매개 변수 여야하며 두 번째 매개 변수는 실제 매개 변수 여야합니다. 이렇게하면 실패한 테스트 사례를 더 쉽게 이해할 수 있습니다.

+0

오하이오 주 감사합니다. 나는이 시험 대상 클래스에서 다른 테스트를 잘라 냈습니다.이 테스트 클래스는 또한 조롱 된 객체를 사용했으며 어떤 일이 벌어 졌는지 완전히 잃어 버렸습니다. 이제 작동합니다! – Random

관련 문제