2: SortNumOfComparisons
This commit is contained in:
parent
6ce71738f2
commit
48197442a8
@ -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();
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user