2: SortNumOfComparisons

This commit is contained in:
Daniel Langbein 2025-01-16 09:19:28 +01:00
parent 6ce71738f2
commit 48197442a8
Signed by: langfingaz
GPG Key ID: 6C47C753F0823002
2 changed files with 55 additions and 0 deletions

View File

@ -0,0 +1,15 @@
package quality.software;
import java.util.Comparator;
/**
* Copied from JDK23 Arrays.java
*/
public final class NaturalOrder implements Comparator<Object> {
@SuppressWarnings("unchecked")
public int compare(Object first, Object second) {
return ((Comparable<Object>) first).compareTo(second);
}
public static final NaturalOrder INSTANCE = new NaturalOrder();
}

View File

@ -0,0 +1,40 @@
package quality.software;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Comparator;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
public class X2_SortNumOfComparisons {
Integer[] array = {3, 2, 1};
@Test
public void mockingNotIdealHere() {
// Create a mocked Comparator.
// - Forward calls of Comparator.compare() to an actual comparator.
// - Record how many times compare() is called.
Comparator<Object> comparator = mock(Comparator.class);
when(comparator.compare(any(Integer.class), any(Integer.class)))
.thenAnswer(invocation ->
NaturalOrder.INSTANCE.compare(
invocation.getArgument(0, Integer.class),
invocation.getArgument(1, Integer.class)));
Arrays.sort(array, comparator);
verify(comparator, times(2)).compare(any(Integer.class), any(Integer.class));
}
@Test
public void useSpyInstead(){
Comparator<Object> comparator = spy(NaturalOrder.INSTANCE);
Arrays.sort(array, comparator);
verify(comparator, times(2)).compare(any(), any());
}
}