또 다른 옵션은 좋은 구식 equals
방법 에 의존하는 것 입니다. 오랫동안의 인수로 when
모의 equals
코드의 인수가 테스트되고, 다음 Mockito는 모의 일치합니다.
다음은 예입니다.
public class MyPojo {
public MyPojo( String someField ) {
this.someField = someField;
}
private String someField;
@Override
public boolean equals( Object o ) {
if ( this == o ) return true;
if ( o == null || getClass() != o.getClass() ) return false;
MyPojo myPojo = ( MyPojo ) o;
return someField.equals( myPojo.someField );
}
}
그런 다음, 가치가 무엇인지 알고 있다고 가정하면 다음 someField
과 같이 조롱 할 수 있습니다.
when(fooDao.getBar(new MyPojo(expectedSomeField))).thenReturn(myFoo);
찬성 : 이것은보다 명확 any
합니다. 코드 검토 자로서 any
, 코드 개발자가 작성하는 코드를 살펴보고 코드의 논리를 살펴보고 전달되는 적절한 객체를 생성합니다.
con : 때때로 객체로 전달되는 필드가 임의의 ID입니다. 이 경우 모의 코드에서 예상 인수 객체를 쉽게 구성 할 수 없습니다.
또 다른 가능한 접근 방법은 메소드 Answer
와 함께 사용할 수있는 Mockito의 객체를 사용하는 when
것입니다. Answer
실제 호출을 가로 채고 입력 인수를 검사하고 모의 객체를 반환 할 수 있습니다. 아래 예제 any
에서 모의중인 메소드에 대한 요청을 잡기 위해 사용 하고 있습니다. 그러나 Answer
람다에서 Bazo 인수를 추가로 검사 할 수 있습니다 ... 아마 적절한 ID가 전달되었는지 확인할 수 있습니다. 나는 any
논쟁 자체에 대해 적어도 약간의 조사가 이루어 지도록 이것을 스스로 선호 한다.
Bar mockBar = //generate mock Bar.
when(fooDao.getBar(any(Bazo.class))
.thenAnswer( ( InvocationOnMock invocationOnMock) -> {
Bazo actualBazo = invocationOnMock.getArgument( 0 );
//inspect the actualBazo here and thrw exception if it does not meet your testing requirements.
return mockBar;
} );
그래서 결론을 내릴 때 equals
(예상되는 인수와 실제 인수가 서로 같아야 함) 의존하는 것이 좋으며 (실제 인수의 상태를 예측할 수 없기 때문에) 등호를 사용할 수없는 경우, 나는 의지 할 것입니다 하는 Answer
인수를 검사합니다.