Başka bir seçenek de eski moda equalsyöntemine güvenmektir . whenSahte equalsargüman test edilen kodda argüman sürece , o zaman Mockito sahte ile eşleşecektir.
İşte bir örnek.
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 );
}
}
sonra, değerinin ne someFieldolacağını bildiğinizi varsayarsak , bu şekilde alay edebilirsiniz.
when(fooDao.getBar(new MyPojo(expectedSomeField))).thenReturn(myFoo);
Artıları: Bu anymaççılardan daha açık . Bir kod gözden geçiren anyolarak, uygun geliştirici nesneyi oluşturmak için kendi kodun mantığı üzerine bakış gibi genç geliştiriciler yazma kodu için bir göz açık tutmak .
con: Bazen nesneye iletilen alan rastgele bir kimliktir. Bu durumda, sahte kodunuzda beklenen bağımsız değişken nesnesini kolayca oluşturamazsınız.
Bir başka olası yaklaşım, Mockito'nun Answeryöntemle kullanılabilecek nesnesini kullanmaktır when. Answergerçek çağrıyı kesip giriş argümanını incelemenizi ve bir sahte nesne döndürmenizi sağlar. Aşağıdaki örnekte any, taklit edilen yönteme yönelik herhangi bir isteği yakalamak için kullanıyorum . Ama sonra Answerlambda'da Bazo argümanını daha da inceleyebilirim ... belki ona doğru bir ID'nin geçtiğini doğrulamak için. Bunu anytek başına tercih ederim, böylece en azından argüman üzerinde bir inceleme yapılır.
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;
} );
Sonuç olarak, güvenmeyi seviyorum equals(beklenen argümanın ve gerçek argümanın birbirine eşit olması gerektiği yerde) ve eşitler mümkün değilse (asıl argümanın durumunu tahmin edemediği için), başvururum için Answerbağımsız değişkeni incelemek için.