blob: c411236394d95e3f8eefd0351a10ad8069a5c308 [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockitousage.stubbing;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.exceptions.base.MockitoException;
import org.mockitousage.IMethods;
import org.mockitoutil.TestBase;
import static junit.framework.TestCase.*;
import static org.mockito.Mockito.*;
public class StubbingConsecutiveAnswersTest extends TestBase {
@Mock
private IMethods mock;
@Test
public void should_return_consecutive_values() throws Exception {
when(mock.simpleMethod())
.thenReturn("one")
.thenReturn("two")
.thenReturn("three");
assertEquals("one", mock.simpleMethod());
assertEquals("two", mock.simpleMethod());
assertEquals("three", mock.simpleMethod());
assertEquals("three", mock.simpleMethod());
assertEquals("three", mock.simpleMethod());
}
@Test
public void should_return_consecutive_values_for_two_nulls() throws Exception {
when(mock.simpleMethod()).thenReturn(null, (String[]) null);
assertNull(mock.simpleMethod());
assertNull(mock.simpleMethod());
}
@Test
public void should_return_consecutive_values_set_by_shorten_then_return_method() throws Exception {
when(mock.simpleMethod()).thenReturn("one", "two", "three");
assertEquals("one", mock.simpleMethod());
assertEquals("two", mock.simpleMethod());
assertEquals("three", mock.simpleMethod());
assertEquals("three", mock.simpleMethod());
assertEquals("three", mock.simpleMethod());
}
@Test
public void should_return_consecutive_value_and_throw_exceptions_set_by_shorten_return_methods() {
when(mock.simpleMethod()).thenReturn("zero")
.thenReturn("one", "two")
.thenThrow(new NullPointerException(), new RuntimeException())
.thenReturn("three")
.thenThrow(new IllegalArgumentException());
assertEquals("zero", mock.simpleMethod());
assertEquals("one", mock.simpleMethod());
assertEquals("two", mock.simpleMethod());
try {
mock.simpleMethod();
fail();
} catch (NullPointerException expected) { }
try {
mock.simpleMethod();
fail();
} catch (RuntimeException expected) { }
assertEquals("three", mock.simpleMethod());
try {
mock.simpleMethod();
fail();
} catch (IllegalArgumentException expected) { }
}
@Test
public void should_throw_consecutively() throws Exception {
when(mock.simpleMethod()).thenThrow(new RuntimeException())
.thenThrow(new IllegalArgumentException())
.thenThrow(new NullPointerException());
try {
mock.simpleMethod();
fail();
} catch (RuntimeException expected) { }
try {
mock.simpleMethod();
fail();
} catch (IllegalArgumentException expected) { }
try {
mock.simpleMethod();
fail();
} catch (NullPointerException expected) { }
try {
mock.simpleMethod();
fail();
} catch (NullPointerException expected) { }
}
@Test
public void should_throw_consecutively_set_by_shorten_then_throw_method() throws Exception {
when(mock.simpleMethod()).thenThrow(new RuntimeException(),
new IllegalArgumentException(),
new NullPointerException());
try {
mock.simpleMethod();
fail();
} catch (RuntimeException expected) { }
try {
mock.simpleMethod();
fail();
} catch (IllegalArgumentException expected) { }
try {
mock.simpleMethod();
fail();
} catch (NullPointerException expected) { }
try {
mock.simpleMethod();
fail();
} catch (NullPointerException expected) { }
}
@Test
public void should_throw_classes() throws Exception {
// Unavoidable JDK7+ 'unchecked generic array creation' warning
when(mock.simpleMethod()).thenThrow(IllegalArgumentException.class);
try {
mock.simpleMethod();
fail();
} catch (IllegalArgumentException expected) { }
try {
mock.simpleMethod();
fail();
} catch (IllegalArgumentException expected) { }
}
@Test
@SuppressWarnings("unchecked")
public void should_throw_consecutively_classes_set_by_shorten_then_throw_method() throws Exception {
// Unavoidable JDK7+ 'unchecked generic array creation' warning
when(mock.simpleMethod()).thenThrow(RuntimeException.class,
IllegalArgumentException.class,
NullPointerException.class);
try {
mock.simpleMethod();
fail();
} catch (RuntimeException expected) { }
try {
mock.simpleMethod();
fail();
} catch (IllegalArgumentException expected) { }
try {
mock.simpleMethod();
fail();
} catch (NullPointerException expected) { }
try {
mock.simpleMethod();
fail();
} catch (NullPointerException expected) { }
}
@Test
public void should_mix_consecutive_returns_with_excepions() throws Exception {
when(mock.simpleMethod())
.thenThrow(new IllegalArgumentException())
.thenReturn("one")
.thenThrow(new NullPointerException())
.thenReturn(null);
try {
mock.simpleMethod();
fail();
} catch (IllegalArgumentException expected) { }
assertEquals("one", mock.simpleMethod());
try {
mock.simpleMethod();
fail();
} catch (NullPointerException expected) { }
assertEquals(null, mock.simpleMethod());
assertEquals(null, mock.simpleMethod());
}
@Test(expected = MockitoException.class)
public void should_validate_consecutive_exception() throws Exception {
when(mock.simpleMethod())
.thenReturn("one")
.thenThrow(new Exception());
}
@Test
public void should_stub_void_method_and_continue_throwing() throws Exception {
doThrow(new IllegalArgumentException())
.doNothing()
.doThrow(new NullPointerException())
.when(mock).voidMethod();
try {
mock.voidMethod();
fail();
} catch (IllegalArgumentException expected) { }
mock.voidMethod();
try {
mock.voidMethod();
fail();
} catch (NullPointerException expected) { }
try {
mock.voidMethod();
fail();
} catch (NullPointerException expected) { }
}
@Test
public void should_stub_void_method() throws Exception {
doNothing()
.doThrow(new NullPointerException())
.doNothing()
.when(mock)
.voidMethod();
mock.voidMethod();
try {
mock.voidMethod();
fail();
} catch (NullPointerException expected) { }
mock.voidMethod();
mock.voidMethod();
}
@Test(expected = MockitoException.class)
public void should_validate_consecutive_exception_for_void_method() throws Exception {
doNothing()
.doThrow(new Exception())
.when(mock)
.voidMethod();
}
}