Mockito를 사용하여 몇 가지 사항을 확인하고 싶습니다. 설명서를 읽으면 일반적인 Mockito 도구를 벗어나지 않으면 불가능하다고 생각합니다.Mockito에 대한 맞춤 VerificationMode 클래스 만들기
DrawTool tool = mock(DrawTool.class);
new Drawer().draw(tool);
verify(tool).begin(); // Make sure begin and end are called exactly once each
verify(tool).end();
InOrder inOrder = inOrder(tool);
inOrder.verify(tool).begin();
inOrder.verify(tool).end();
inOrder.verify(tool).flush();
inOrder.verifyNoMoreInteractions();
이 테스트는 flush
가 마지막 상호 작용임을 확인뿐만 아니라 몇 가지를 확인하지만, Mockito가 begin
첫 번째 상호 작용인지 확인 할 수있는 방법이없는 것 같다 : 예는이 걸릴. 나는 Mockito의 툴에서의 비대칭성에 놀라기 때문에 사용자 정의 VerificationMode를 만들 가능성을 조사하고 있습니다. 나는 뭔가라는 beforeAnyOther
같은 VerificationMode를 작성하고 다음과 같이 사용하고 싶습니다 :
inOrder.verify(tool, beforeAnyOther()).begin();
inOrder.verify(tool).end();
inOrder.verify(tool, beforeAnyOther()).flush();
inOrder.verifyNoMoreInteractions();
의도가 begin
가 떠나있는 동안 end
와 flush
사이에 관련 상호 작용이 없는지 먼저 호출되고 있는지 확인하는 것입니다 begin
과 end
사이의 상호 작용이 없습니다.
나는 기존의 VerificationMode에 대한 소스 코드를 연구 해왔다. 원칙적으로 이것은 구현할 간단한 VerificationMode가되어야하지만 일단 Mockito의 주요 클래스를 넘어 서면 문서가 매우 얇아지고 나는이 수업을 만지지 말아야한다고 말해 주려고합니다. 특히 org.mockito.internal
을 시작하는 패키지는주의해야합니다. 왜냐하면 그 이름은 공개 되어도이 클래스가 변경 될 수 있음을 나에게 알리기 때문입니다.
VerificationMode 구현을위한 매우 중요한 클래스는 모두 org.mockito.internal.verification.api
패키지에있는 것 같습니다. 전체 패키지에는 javadoc이 1 비트 밖에없는 것 같으며, "이 패키지는 확인 API가 완전히 완성되면 공개됩니다." 이 패키지가 적극적으로 수정되고 있으므로 패키지에 포함 된 내용을 사용해서는 안되며 실제로 수년 동안 말했던 패키지와 패키지가 실제로 변경되지 않을 것입니다.
org.mockito.internal.verification.api
클래스를 사용할 수없는 경우 사용자 지정 VerificationModes를 구현할 수없는 것 같습니다. 사용자 정의 VerificationMode없이 이와 같은 작업을 수행 할 수있는 방법이 있습니까?
[Mockito 사용자 그룹] (https://groups.google.com/forum/#!forum/mockito)에 게시 할 가치가 있습니다. – Jonathan