blob: 6573d0ebba55a69ec853530bee9926e336dae828 [file] [log] [blame]
package org.mockitousage.junitrunner;
import java.util.List;
import org.junit.Test;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.exceptions.misusing.UnfinishedStubbingException;
import org.mockito.exceptions.verification.TooLittleActualInvocations;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockitousage.IMethods;
import org.mockitoutil.JUnitResultAssert;
import org.mockitoutil.TestBase;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class SilentRunnerTest extends TestBase {
JUnitCore runner = new JUnitCore();
@Test public void passing_test() {
//when
Result result = runner.run(
SomeFeature.class
);
//then
JUnitResultAssert.assertThat(result).isSuccessful();
}
@Test public void failing_test() {
//when
Result result = runner.run(
SomeFailingFeature.class
);
//then
JUnitResultAssert.assertThat(result).fails(1, TooLittleActualInvocations.class);
}
@Test public void failing_test_in_constructor() {
//when
Result result = runner.run(
FailsInConstructor.class
);
//then
JUnitResultAssert.assertThat(result).fails(1, IllegalArgumentException.class);
}
@Test public void validates_framework_usage() {
//when
Result result = runner.run(
UsesFrameworkIncorrectly.class
);
//then
JUnitResultAssert.assertThat(result).fails(1, "unfinished_stubbing_test_method", UnfinishedStubbingException.class);
}
@Test
public void ignores_unused_stubs() {
JUnitCore runner = new JUnitCore();
//when
Result result = runner.run(HasUnnecessaryStubs.class);
//then
JUnitResultAssert.assertThat(result).isSuccessful();
}
@RunWith(MockitoJUnitRunner.Silent.class)
public static class SomeFeature {
@Mock List<String> list;
@Test public void some_behavior() {
when(list.get(0)).thenReturn("0");
assertEquals("0", list.get(0));
}
}
@RunWith(MockitoJUnitRunner.Silent.class)
public static class SomeFailingFeature {
@Mock List<String> list;
@Test public void some_failing_behavior() {
list.clear();
verify(list, times(2)).clear();
}
}
@RunWith(MockitoJUnitRunner.Silent.class)
public static class FailsInConstructor {
{
if (System.currentTimeMillis() > 0) {
throw new IllegalArgumentException("Boo!");
}
}
@Mock List<String> list;
@Test public void some_behavior() {}
}
@RunWith(MockitoJUnitRunner.Silent.class)
public static class UsesFrameworkIncorrectly {
@Mock List<?> list;
@Test public void unfinished_stubbing_test_method() {
when(list.get(0)); //unfinished stubbing
}
}
@RunWith(MockitoJUnitRunner.Silent.class)
/**
* The test class itself is passing but it has some unnecessary stubs
*/
public static class HasUnnecessaryStubs {
IMethods mock1 = when(mock(IMethods.class).simpleMethod(1)).thenReturn("1").getMock();
IMethods mock2 = when(mock(IMethods.class).simpleMethod(2)).thenReturn("2").getMock();
IMethods mock3 = when(mock(IMethods.class).simpleMethod(3)).thenReturn("3").getMock();
@Test
public void usesStub() {
assertEquals("1", mock1.simpleMethod(1));
}
@Test
public void usesStubWithDifferentArg() {
assertEquals(null, mock2.simpleMethod(200));
assertEquals(null, mock3.simpleMethod(300));
}
}
}