나는 최근에 Mockito (또는 조롱/스터 빙)를 사용하기 시작했습니다. 나는 물체를 조롱하는 방법에 처진지기 시작 해요,하지만 난 다음 코드에 붙어 :mockito : WrongTypeOfReturnValue (JAVA)
// line causing the problem
when(station1.retrievePendingTasks().size()).thenReturn(0);
// error msg
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
Integer cannot be returned by retrievePendingTasks()
retrievePendingTasks() should return Set
그것은 분명히 할 수있는 내게 말하고 :
public class ConveyorBeltTest {
private Layout layout;
@Mock private WorkStation station1;
@Mock private WorkStation station2;
@Mock private WorkStation station3;
@Mock private CarAssemblyProcess car1;
@Mock private CarAssemblyProcess car2;
@Before
public void setUp() {
layout = new Layout();
layout.getWorkStations().add(station1);
layout.getWorkStations().add(station2);
layout.getWorkStations().add(station3);
when(station1.retrievePendingTasks().size()).thenReturn(0);
when(station2.retrievePendingTasks().size()).thenReturn(2);
when(station3.retrievePendingTasks().size()).thenReturn(1);
when(station1.getCar()).thenReturn(car1);
// it's impossible to have a car in a workstation and to have pending tasks, but it's tested regardless
when(station2.getCar()).thenReturn(car2);
when(station3.getCar()).thenReturn(null);
}
다음 줄을 던졌습니다 station1이 실제 객체가 아니라 모의 객체이기 때문에 station1.retrievePendingTasks()를 인식하지 못합니다. 그러나 나는 모의가 있다면 모의 명령 뒤에 명령을 내릴 수 있다고 생각했다. 그 명령은 예상되는 최종 결과를 thenReturn()에 제공하는 한 모두 중요하지 않다. 누군가 내가 정확히 여기서 잘못한 것을 분명히 할 수 있습니까?
또한 함께 시도 :
doReturn(0).when(station1).retrievePendingTasks().size();
하지만 결과는 동일합니다.
해결 방법은 새로운 Set을 만들고 모의 요소로 채우고 각 스테이션의 retrievePendingTasks() 결과에 전달하는 것입니다. 내 유일한 목표는 세트의 크기에 대한 숫자를 가질 때 화면을 막히게하는 추가 코드입니다.
을 피하기 위해 테스트를 다시 작성하는 것이 좋습니다 실제로 모의 객체를 사용하지 않고 그것을 다시 할 수있는 방법을 찾을 수 있었다 (대부분) : P 당신은 아마 그 말이 맞아 내가 할 수있을 때마다 나는 조롱을 피해야합니다. 나는 단지 하루나 이틀 전에 이것을 배웠고 약간의 흥분을 감추었습니다! 미래 상황을 아는 것은 여전히 유용합니다. 감사!:) – Babyburger
@Babyburger : 도망가는 것은 우리 모두에게 일어납니다. 나는 이미 그렇게 계속 조롱하고있는 많은 코드베이스를 가지고있다. –