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