2013-04-18 3 views
6

Mockito를 사용하여 간단한 setter 메서드를 조롱하는 방법을 알아낼 수 없습니다. Mockito의 settermethod를 덮어 쓰는 방법은 무엇입니까?

class MyClass { 
    private SomeObject someObject; 

    public void setSomeObject(SomeObject someObject) { 
     this.someObject = someObject; 
    } 

    public someObject getSomeObject() { 
     return someObject; 
    } 
} 

가 지금은 그냥 "setSomeObject"가 호출 될 때 "SomeObject의"의 새로운 인스턴스가 설정되어 있음을 원하는 : 나는 다음과 같은 클래스가 있습니다. 또한 setter 내의 매개 변수는 무시되어야합니다.

MyClass mockedClass = mock(MyClass.class); 
when(mockedClass.setSomeObject([ignoreWhatsInHere])) 
    .then(mockedClass.setSomeObject(new SomeObject(); 

그러나, 나는이 근무 구문을 얻을 수없는 것 :

나는 이런 식으로 뭔가를해야합니다. getters()를 사용하여 모의 작업을 수행 할 수 있습니다. 왜냐하면 반환 할 수 있기 때문입니다. 하지만 나는 setters()에 대해 동일한 작업을 수행하는 방법을 알아낼 수 없습니다.

모두에게 감사드립니다.

+0

왜 필요한가요? 정확히 무엇을 달성하고 싶습니까? – axtavt

+0

hmm이 작업은 void가 적용되지 않는다고 말합니다./ – Lonelyisland

+0

잘 setSomeObject()가 어떻게 든 호출됩니다 : myClass.setSomeObject (someWeirdFunction.whichreturnsfinallySomeObject()). 그래서 사실 setter에 대한 호출이 존재 하는지를 알고 싶습니다. 그런 다음 객체를 직접 설정해야합니다. – Lonelyisland

답변

5

setter를 포함한 void를 반환하는 메서드를 테스트 할 때 doThrow()|doAnswer()|doNothing()|doReturn() 패밀리를 사용하여 적절한 작업을 수행 할 수 있어야합니다. 그래서 그 대신

when(mockedObject.someMethod()).thenReturn(something) 

의 당신은 몹시 우아하지만, 사용자 정의 응답 개체를 반환 doAnswer()을 사용, 당신은 스텁 사용하여 더 나을 수 있습니다 : 당신이 반환하려는 경우

doAnswer(new Answer() { 
    public Object answer(InvocationOnMock invocation) { 
      //whatever code you want to run when the method is called 
      return null; 
    }}).when(mockedObject).someMethod(); 
} 

을 동일한 getter 호출과 다른 값을 사용하는 경우 mockito의 연속 스터 빙 호출을 볼 수도 있습니다. 예를 들어 메소드의 첫 번째 호출에 대해 오류를 발생시킨 다음 두 번째 호출에서 객체를 반환 할 수 있습니다.

두 가지에 대한 자세한 내용은 http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#12을 참조하십시오.

관련 문제