This test class shows stub, mock, and spy usage with JUnit and Mockito.
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
interface Service {
String getData();
}
class RealService implements Service {
public String getData() {
return "real data";
}
}
public class DoubleTest {
@Test
void testStub() {
Service stub = new Service() {
public String getData() {
return "stub data";
}
};
assertEquals("stub data", stub.getData());
}
@Test
void testMock() {
Service mock = Mockito.mock(Service.class);
Mockito.when(mock.getData()).thenReturn("mock data");
assertEquals("mock data", mock.getData());
Mockito.verify(mock).getData();
}
@Test
void testSpy() {
RealService real = new RealService();
Service spy = Mockito.spy(real);
Mockito.when(spy.getData()).thenReturn("spy data");
assertEquals("spy data", spy.getData());
Mockito.verify(spy).getData();
}
}