나는 다음과 같은 서비스 클래스가있다 반환하지 않는 방법을 호출하는 경우 확인 . 나는 그 방법을 조롱해야 할까? 메소드를 조롱해야한다면, 아무 것도 리턴하지 않는 메소드를 어떻게 조롱 하는가? when
에는 메소드에서 무언가를 반환해야합니다.mockito는 조건이 통과 anythig
0
A
답변
2
으로 말하는 방법을 조롱 수 있습니다 (특히 : checkSepak
는 List<Jon>
필요하지만 코드는 List<Integer>
입니다 ages
을 통과).
이들을 수정 한 후 테스트에서 생성 된 (그리고 dao.getAges()
의 반환 값으로 사용 된) ages
목록이 비어 있기 때문에 테스트에 실패했다는 것을 깨달았습니다. 따라서 ages != null && !ages.isEmpty()
조건이 충족되지 않아 코드가 speaker.speak()
호출을 건너 뜁니다.
확실한 솔루션은 몇 가지 요소를 추가하여 ages
목록이 비어 있도록하는 것입니다 :
public class MyTest {
@Test
public void speakTest() {
Person p = new Person();
Speaker speaker = mock(Speaker.class);
p.speaker = speaker;
AgeDAO dao = mock(AgeDAO.class);
p.dao = dao;
List<Jon> list = createJonList();
List<Integer> ages = createAgesList();
ages.add(5); // Make the list of ages non-empty
when(dao.getAge(anyList())).thenReturn(ages);
p.checkSpeak(list);
verify(p.speaker).speak(anyList());
}
private List<Integer> createAgesList() {
return new ArrayList<Integer>();
}
private List<Jon> createJonList() {
return new ArrayList<Jon>();
}
}
class Person {
AgeDAO dao;
Speaker speaker;
public void checkSpeak(List<Jon> list) {
List<Integer> ages = dao.getAge(list);
if (ages != null && !ages.isEmpty()) {
speaker.speak(list);
}
}
}
0
나는 dao에 대해서만 "when"을 사용 했으므로 Speaker 용 객체를 모의 할 필요가 없다고 생각합니다. 발언자가 조롱 할 필요가있는 객체가 없으면 발화 방법을 실패하게 만들지 않으므로 발언자를 조롱 할 필요가 없습니다. p.speaker = new Speaker();를 실행 해보십시오. 이것은 Speaker 클래스 코드가 어떤 것인지 잘 모르기 때문에 가장 좋은 추측입니다.
0
당신은 당신이 게시 코드에서 몇 가지 사소한 문제가 있었다 doNothing
은'Person' 클래스의 전체 코드를 보여주십시오; 또한, 왜 불변 클래스 대신 빈을 사용 하는가? (지금은'Person'이 컴파일 할 수 없다.) – fge
또한'dao.getAge (anyInt())'를 호출했지만 코드에는'dao.getAge (일부)'. 더 많은 코드를 표시하십시오. – fge
실제 코드가 너무 크고 너무 많습니다. 방금 샘플로 논리를 에뮬레이션했습니다. AgeDAO 및 Speaker는 EJB를 주입합니다. –