Başka bir seçenek de eski moda equals
yöntemine güvenmektir . when
Sahte equals
argü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 someField
olacağını bildiğinizi varsayarsak , bu şekilde alay edebilirsiniz.
when(fooDao.getBar(new MyPojo(expectedSomeField))).thenReturn(myFoo);
Artıları: Bu any
maççılardan daha açık . Bir kod gözden geçiren any
olarak, 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 Answer
yöntemle kullanılabilecek nesnesini kullanmaktır when
. Answer
gerç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 Answer
lambda'da Bazo argümanını daha da inceleyebilirim ... belki ona doğru bir ID'nin geçtiğini doğrulamak için. Bunu any
tek 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 Answer
bağımsız değişkeni incelemek için.