| /* |
| * Copyright (c) 2007 Mockito contributors |
| * This program is made available under the terms of the MIT License. |
| */ |
| package org.mockito; |
| |
| import java.lang.annotation.Documented; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.Target; |
| |
| import org.mockito.junit.MockitoJUnitRunner; |
| |
| import static java.lang.annotation.ElementType.FIELD; |
| import static java.lang.annotation.ElementType.PARAMETER; |
| import static java.lang.annotation.RetentionPolicy.RUNTIME; |
| |
| /** |
| * Mark a field as a mock. |
| * |
| * <ul> |
| * <li>Allows shorthand mock creation.</li> |
| * <li>Minimizes repetitive mock creation code.</li> |
| * <li>Makes the test class more readable.</li> |
| * <li>Makes the verification error easier to read because the <b>field name</b> is used to identify the mock.</li> |
| * </ul> |
| * |
| * <pre class="code"><code class="java"> |
| * public class ArticleManagerTest extends SampleBaseTestCase { |
| * |
| * @Mock private ArticleCalculator calculator; |
| * @Mock(name = "database") private ArticleDatabase dbMock; |
| * @Mock(answer = RETURNS_MOCKS) private UserProvider userProvider; |
| * @Mock(extraInterfaces = {Queue.class, Observer.class}) private articleMonitor; |
| * @Mock(stubOnly = true) private Logger logger; |
| * |
| * private ArticleManager manager; |
| * |
| * @Before public void setup() { |
| * manager = new ArticleManager(userProvider, database, calculator, articleMonitor, logger); |
| * } |
| * } |
| * |
| * public class SampleBaseTestCase { |
| * |
| * @Before public void initMocks() { |
| * MockitoAnnotations.initMocks(this); |
| * } |
| * } |
| * </code></pre> |
| * |
| * <p> |
| * <strong><code>MockitoAnnotations.initMocks(this)</code></strong> method has to be called to initialize annotated objects. |
| * In above example, <code>initMocks()</code> is called in @Before (JUnit4) method of test's base class. |
| * For JUnit3 <code>initMocks()</code> can go to <code>setup()</code> method of a base class. |
| * <strong>Instead</strong> you can also put initMocks() in your JUnit runner (@RunWith) or use the built-in |
| * {@link MockitoJUnitRunner}. |
| * </p> |
| * |
| * @see Mockito#mock(Class) |
| * @see Spy |
| * @see InjectMocks |
| * @see MockitoAnnotations#initMocks(Object) |
| * @see MockitoJUnitRunner |
| */ |
| @Target({FIELD, PARAMETER}) |
| @Retention(RUNTIME) |
| @Documented |
| public @interface Mock { |
| |
| Answers answer() default Answers.RETURNS_DEFAULTS; |
| |
| boolean stubOnly() default false; |
| |
| String name() default ""; |
| |
| Class<?>[] extraInterfaces() default {}; |
| |
| boolean serializable() default false; |
| } |