|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |
@Retention(value=RUNTIME) @Target(value=FIELD) @Documented public @interface Spy
Allows shorthand wrapping of field instances in an spy object.
Example:
public class Test{
//Instance for spying is created by calling constructor explicitly:
@Spy Foo spyOnFoo = new Foo("argument");
//Instance for spying is created by mockito via reflection (only default constructors supported):
@Spy Bar spyOnBar;
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
...
}
Same as doing:
Foo spyOnFoo = Mockito.spy(new Foo("argument"));
Bar spyOnFoo = Mockito.spy(new Bar());
The field annotated with @Spy can be initialized by Mockito if a zero argument constructor
can be found in the type (even private). But Mockito cannot instantiate inner classes, local classes,
abstract classes and interfaces.
The field annotated with @Spy can be initiatialized explicitly at declaration point.
Alternatively, if you don't provide the instance Mockito will try to find zero argument constructor (even private) and create an instance for you.
But Mockito cannot instantiate inner classes, local classes, abstract classes and interfaces.
For example this class can be instantiated by Mockito :
public class Bar {
private Bar() {}
public Bar(String publicConstructorWithOneArg) {}
}
Warning if you call MockitoAnnotations.initMocks(this)
in a
super class constructor then this will not work. It is because fields
in subclass are only instantiated after super class constructor has returned.
It's better to use @Before.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |