ProgramingTip

mockito 구입 및 인수 값 가져 오기

bestdevel 2020. 11. 3. 08:23
반응형

mockito 구입 및 인수 값 가져 오기


함수 인수 값을 활용하기 위해 Mockito를 얻을 수 없습니다! 검색 엔진 색인을 조롱하고 색인을 만드는 대신 해시를 사용하고 있습니다.

// Fake index for solr
Hashmap<Integer,Document> fakeIndex;

// Add a document 666 to the fakeIndex
SolrIndexReader reader = Mockito.mock(SolrIndexReader.class);

// Give the reader access to the fake index
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))

쿼리 결과 (즉, 반환하는 문서)를 테스트하기 때문에 임의의 인수를 사용할 수 없습니다. 많이, 특정 값을 지정하고 각 문서에 대한 행을 갖고 싶지!

Mockito.when(reader.document(0)).thenReturn(document(fakeIndex(0))
Mockito.when(reader.document(1)).thenReturn(document(fakeIndex(1))
....
Mockito.when(reader.document(n)).thenReturn(document(fakeIndex(n))

Mockito를 사용하여 페이지 의 수명을 보았습니다 . 불행히도 자바가 작동하지 않는 자체 해석을 얻을 수 없습니다.

편집 (설명을 위해) : Mockito가 인수 X를 배치하여 내 함수를 전달해야합니까? 함수에 전달 된 X의 값 (또는 참조)을 원합니다.

모든 경우를 열거하고 싶지는 다른 쿼리에 대해 다른 결과를 테스트하기 때문에 임의의 인수가 작동하지 않습니다.

Mockito 페이지에는

val mockedList = mock[List[String]]
mockedList.get(anyInt) answers { i => "The parameter is " + i.toString } 

그것은 자바가 아니고 자바로 번역하거나 무슨 일이 일어 났는지 함수로 전달하는 방법을.


저는 Mockito를 사용합니다. 해본 적이 없지만 배우고 싶어요. 나보다 잘 모르는 사람이 대답하면 대답합니다!

Mockito.when(reader.document(anyInt())).thenAnswer(new Answer() {
 public Object answer(InvocationOnMock invocation) {
     Object[] args = invocation.getArguments();
     Object mock = invocation.getMock();
     return document(fakeIndex((int)(Integer)args[0]));
     }
 });

ArgumentCaptors를 확인하십시오.

http://site.mockito.org/mockito/docs/1.10.19/org/mockito/ArgumentCaptor.html

ArgumentCaptor<Integer> argument = ArgumentCaptor.forClass(Integer.class);
Mockito.when(reader.document(argument.capture())).thenAnswer(
  new Answer() {
    Object answer(InvocationOnMock invocation) {
      return document(argument.getValue());
    }
  });

ArgumentCaptor와 함께 verify ()를 사용하여 테스트 실행을 보장하고 ArgumentCaptor를 사용하여 인수를 평가할 수 있습니다.

ArgumentCaptor<Document> argument = ArgumentCaptor.forClass(Document.class);
verify(reader).document(argument.capture());
assertEquals(*expected value here*, argument.getValue());

인수의 값은 추가 조작 / 검사 또는 원하는 작업을 위해 argument.getValue ()를 통해 분명히 액세스 할 수 있습니다.


Java 8에서는 다음과 같을 수 있습니다.

Mockito.when(reader.document(anyInt())).thenAnswer(
  (InvocationOnMock invocation) -> document(invocation.getArguments()[0]));

나는 그것이 document지도 라고 가정하고있다 .

참고 URL : https://stackoverflow.com/questions/6631764/mockito-callbacks-and-getting-argument-values

반응형