리턴값이나 예외를 실제 메소드가 호출되는 시점에 만들고 싶을 수 있는데 그럴 때는 andAnswer()을 사용합니다.

expectLastCall().andAnswer(new IAnswer<Object>() {
public Object answer() throws Throwable {
((User) getCurrentArguments()[0]).setUserId(1);
return null;
}
});

이 전 글들에서 사용했던 andReturn()이나, andThrow()의 인자로는 미리 만들어 둔 객체들을 넘겨줬다면, andAnswer()에서는 IAnswer 인터페이스를 구현하여 특정 조건에 따라 각기 다른 결과를 반환하는 구현체를 만들어 둘 수 있습니다.

특정 조건이라고 한다면.. 어떤 데이터를 가지고 판단을 하겠다는 건데, 저 안에서 접근할 수 있는 데이터는  Obejct 타입의 배열을 반환하는 getCurrentAurguments()를 사용하여, 인지로 넘겨준 값에 접근할 수 있습니다.

반환하는 값이 없으면 위 처러 null을 리턴하면 되고, 반환하는 값이 있으면 그 값을 반환하고, 예외를 던지고 싶으면 던져주면 됩니다.