1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.annotation.*; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/** 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Allows shorthand {@link org.mockito.ArgumentCaptor} creation on fields. 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p>Example: 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * public class Test{ 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Captor ArgumentCaptor<AsyncCallback<Foo>> captor; 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Before 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * public void init(){ 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * MockitoAnnotations.initMocks(this); 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * } 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Test public void shouldDoSomethingUseful() { 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //... 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * verify(mock.doStuff(captor.capture())); 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * assertEquals("foo", captor.getValue()); 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * } 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * } 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * One of the advantages of using @Captor annotation is that you can avoid warnings related capturing complex generic types. 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see ArgumentCaptor 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @since 1.8.3 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Retention(RetentionPolicy.RUNTIME) 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Target(ElementType.FIELD) 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Documented 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic @interface Captor {} 41