Eu tenho uma classe que implementa Comparable
interface
public class MyClass implements java.lang.Comparable<MyClass>{
@Override
public int compareTo(MyClass o) {
return 2;
}
}
Eu escrevi uma classe de teste para verificar o valor de retorno padrão do objeto simulado, e a versão do framework Mockito é 5.14.2
@Test
void testMyClass() {
var myClass = mock(MyClass.class);
assertEquals(0, myClass.compareTo(new MyClass()));
}
Infelizmente, esse teste falhou. O JUnit me disse que o compareTo
método retorna 1, não 0.
No entanto, quando substituí o java.lang.Comparable
pela minha Comparable
interface personalizada, que é totalmente igual à java.lang.Comparable
interface. Este teste passou! .
Alguém poderia me explicar isso?
Esse é um comportamento documentado em
ReturnsEmptyValues
, que é a resposta padrão para cada simulação.Então ele só retornará 0 se você escreveu
myClass.compareTo(myClass)
.Veja também o código-fonte , onde há um caso especial para
isCompareToMethod
ser verdadeiro.Não faz sentido
compareTo(null)
retornar 0 porque nenhum objeto pode ser igual anull
. Embora um objeto simulado não possa preencher todos os requisitos de umacompareTo
implementação, ainda é útil ter pelo menos algum comportamento sensato. Isso é essencialmente tornarcompareTo
"consistente comequals
".Dito isso, não consigo descobrir o que é "issue 184", então não posso comentar sobre isso.