package cn.jimmyshi.beanquery.comparators; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.only; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Test; public class ComparableObjectComparatorTest { ComparableObjectComparator comparator=new ComparableObjectComparator(); @Test public void shouldGet0IfCompareing2nulls() { assertEquals(0,comparator.compare(null, null)); } @Test public void shouldGet1IfArg1NotNullAndArg2Null(){ assertEquals(1,comparator.compare(mock(Comparable.class), null)); } @Test public void shouldGet1IfArgComprableAndArg2NotComparable(){ assertEquals(1,comparator.compare(mock(Comparable.class), new Object())); } @Test public void shouldGetNegotiveIfArg1NullAndArg2NotNull(){ assertEquals(-1,comparator.compare(null, mock(Comparable.class))); } @Test public void shouldGetNegotiveIfArg1NotComprableAndArg2Comparable(){ assertEquals(-1,comparator.compare(new Object(), mock(Comparable.class))); } @SuppressWarnings({ "rawtypes", "unchecked" }) @Test public void shouldGet0WhenExceptionWhileComparing(){ //given Comparable o1=mock(Comparable.class); when(o1.compareTo(any())).thenThrow(IllegalAccessException.class); //when int result=comparator.compare(o1, mock(Comparable.class)); //then assertEquals(0,result); verify(o1,only()).compareTo(any()); } @Test public void testCompare(){ assertEquals(0,comparator.compare("ABC", "ABC")); } }