|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.powermock.api.support.membermodification.MemberMatcher
org.powermock.api.support.membermodification.MemberModifier
org.powermock.api.mockito.PowerMockito
public class PowerMockito
PowerMockito extends Mockito functionality with several new features such as mocking static and private methods and more. Use PowerMock instead of Mockito where applicable.
Mockito
Constructor Summary | |
---|---|
PowerMockito()
|
Method Summary | ||
---|---|---|
static PowerMockitoStubber |
doAnswer(org.mockito.stubbing.Answer<?> answer)
Use doAnswer() when you want to stub a void method with generic Answer . |
|
static PowerMockitoStubber |
doCallRealMethod()
Use doCallRealMethod() when you want to call the real implementation of a method. |
|
static PowerMockitoStubber |
doNothing()
Use doNothing() for setting void methods to do nothing. |
|
static PowerMockitoStubber |
doReturn(Object toBeReturned)
Use doReturn() in those rare occasions when you cannot use Mockito.when(Object) . |
|
static PowerMockitoStubber |
doThrow(Throwable toBeThrown)
Use doThrow() when you want to stub the void method with an exception. |
|
static
|
mock(Class<T> type)
Creates a mock object that supports mocking of final and native methods. |
|
static
|
mock(Class<T> classToMock,
org.mockito.stubbing.Answer defaultAnswer)
Creates mock with a specified strategy for its answers to interactions. |
|
static
|
mock(Class<T> classToMock,
org.mockito.MockSettings mockSettings)
Creates a mock with some non-standard settings. |
|
static void |
mockStatic(Class<?> classMock,
org.mockito.stubbing.Answer defaultAnswer)
Creates class mock with a specified strategy for its answers to interactions. |
|
static void |
mockStatic(Class<?> type,
Class<?>... types)
Enable static mocking for all methods of a class. |
|
static void |
mockStatic(Class<?> classToMock,
org.mockito.MockSettings mockSettings)
Creates a class mock with some non-standard settings. |
|
static
|
spy(Class<T> type)
Spy on classes (not "spyable" from normal Mockito). |
|
static
|
spy(T object)
Spy on objects that are final or otherwise not "spyable" from normal Mockito. |
|
static
|
verifyNew(Class<?> mock,
org.mockito.verification.VerificationMode mode)
Verifies certain behavior happened at least once / exact number of times / never. |
|
static
|
verifyNew(Class<T> mock)
Verifies certain behavior happened once |
|
static void |
verifyNoMoreInteractions(Object... mocks)
Checks if any of given mocks (can be both instance and class mocks) has any unverified interaction. |
|
static PrivateMethodVerification |
verifyPrivate(Class<?> clazz)
Verify a private method invocation for a class. |
|
static PrivateMethodVerification |
verifyPrivate(Class<?> clazz,
org.mockito.verification.VerificationMode verificationMode)
Verify a private method invocation for a class with a given verification mode. |
|
static PrivateMethodVerification |
verifyPrivate(Object object)
Verify a private method invocation for an instance. |
|
static PrivateMethodVerification |
verifyPrivate(Object object,
org.mockito.verification.VerificationMode verificationMode)
Verify a private method invocation with a given verification mode. |
|
static void |
verifyStatic()
Verifies certain behavior happened once |
|
static void |
verifyStatic(org.mockito.verification.VerificationMode verificationMode)
Verifies certain behavior happened at least once / exact number of times / never. |
|
static void |
verifyZeroInteractions(Object... mocks)
Verifies that no interactions happened on given mocks (can be both instance and class mocks). |
|
static
|
when(Class<?> cls,
Method method)
Expect calls to private static methods. |
|
static
|
when(Class<?> klass,
Object... arguments)
Expect calls to private static methods without having to specify the method name. |
|
static
|
when(Class<?> clazz,
String methodToExpect,
Object... arguments)
Expect a static private or inner class method call. |
|
static
|
when(Object instance,
Method method)
Expect calls to private methods. |
|
static
|
when(Object instance,
Object... arguments)
Expect calls to private methods without having to specify the method name. |
|
static
|
when(Object instance,
String methodName,
Object... arguments)
Expect calls to private methods. |
|
static
|
when(T methodCall)
Just delegates to the original Mockito.when(Object) method. |
|
static
|
whenNew(Class<T> type)
Allows specifying expectations on new invocations. |
|
static
|
whenNew(Constructor<T> ctor)
Allows specifying expectations on new invocations. |
|
static
|
whenNew(String fullyQualifiedName)
Allows specifying expectations on new invocations for private member (inner) classes, local or anonymous classes. |
Methods inherited from class org.powermock.api.support.membermodification.MemberModifier |
---|
replace, stub, suppress, suppress, suppress, suppress, suppress, suppress, suppress |
Methods inherited from class org.powermock.api.support.membermodification.MemberMatcher |
---|
constructor, constructor, constructors, constructorsDeclaredIn, defaultConstructorIn, everythingDeclaredIn, field, fields, fields, fields, fields, method, method, methods, methods, methods, methodsDeclaredIn |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public PowerMockito()
Method Detail |
---|
public static void mockStatic(Class<?> type, Class<?>... types)
type
- the class to enable static mockingpublic static void mockStatic(Class<?> classMock, org.mockito.stubbing.Answer defaultAnswer)
It is the default answer so it will be used only when you don't stub the method call.
mockStatic(Foo.class, RETURNS_SMART_NULLS); mockStatic(Foo.class, new YourOwnAnswer());
classMock
- class to mockdefaultAnswer
- default answer for unstubbed methodspublic static void mockStatic(Class<?> classToMock, org.mockito.MockSettings mockSettings)
The number of configuration points for a mock grows so we need a fluent
way to introduce new configuration without adding more and more
overloaded PowerMockito.mockStatic() methods. Hence MockSettings
.
mockStatic(Listener.class, withSettings() .name("firstListner").defaultBehavior(RETURNS_SMART_NULLS)); );Use it carefully and occasionally. What might be reason your test needs non-standard mocks? Is the code under test so complicated that it requires non-standard mocks? Wouldn't you prefer to refactor the code under test so it is testable in a simple way?
See also Mockito.withSettings()
classToMock
- class to mockmockSettings
- additional mock settingspublic static <T> T mock(Class<T> type)
T
- the type of the mock objecttype
- the type of the mock object
public static <T> T mock(Class<T> classToMock, org.mockito.stubbing.Answer defaultAnswer)
It is the default answer so it will be used only when you don't stub the method call.
Foo mock = mock(Foo.class, RETURNS_SMART_NULLS); Foo mockTwo = mock(Foo.class, new YourOwnAnswer());
See examples in javadoc for Mockito
class
classToMock
- class or interface to mockdefaultAnswer
- default answer for unstubbed methods
public static <T> T mock(Class<T> classToMock, org.mockito.MockSettings mockSettings)
The number of configuration points for a mock grows so we need a fluent
way to introduce new configuration without adding more and more
overloaded Mockito.mock() methods. Hence MockSettings
.
Listener mock = mock(Listener.class, withSettings() .name("firstListner").defaultBehavior(RETURNS_SMART_NULLS)); );Use it carefully and occasionally. What might be reason your test needs non-standard mocks? Is the code under test so complicated that it requires non-standard mocks? Wouldn't you prefer to refactor the code under test so it is testable in a simple way?
See also Mockito.withSettings()
See examples in javadoc for Mockito
class
classToMock
- class or interface to mockmockSettings
- additional mock settings
public static <T> T spy(T object)
T
- the type of the mock objectobject
- the object to spy on
Mockito.spy(Object)
public static <T> void spy(Class<T> type)
T
- the type of the class mocktype
- the type of the class mockMockito.spy(Object)
public static void verifyStatic()
Alias to verifyStatic(times(1))
E.g:
verifyStatic(); ClassWithStaticMethod.someStaticMethod("some arg");Above is equivalent to:
verifyStatic(times(1)); ClassWithStaticMethod.someStaticMethod("some arg");
Although it is possible to verify a stubbed invocation, usually it's just redundant. Let's say you've stubbed foo.bar(). If your code cares what foo.bar() returns then something else breaks(often before even verify() gets executed). If your code doesn't care what get(0) returns then it should not be stubbed.
public static void verifyStatic(org.mockito.verification.VerificationMode verificationMode)
verifyStatic(times(5)); ClassWithStaticMethod.someStaticMethod("was called five times"); verifyStatic(atLeast(2)); ClassWithStaticMethod.someStaticMethod("was called at least two times"); //you can use flexible argument matchers, e.g: verifyStatic(atLeastOnce()); ClassWithStaticMethod.someMethod(<b>anyString()</b>);times(1) is the default and can be omitted
verificationMode
- times(x), atLeastOnce() or never()public static PrivateMethodVerification verifyPrivate(Object object) throws Exception
Exception
- If something unexpected goes wrong.Mockito#verify(Object)}
public static PrivateMethodVerification verifyPrivate(Object object, org.mockito.verification.VerificationMode verificationMode) throws Exception
Exception
- If something unexpected goes wrong.Mockito#verify(Object)}
public static PrivateMethodVerification verifyPrivate(Class<?> clazz) throws Exception
Exception
- If something unexpected goes wrong.Mockito#verify(Object)}
public static PrivateMethodVerification verifyPrivate(Class<?> clazz, org.mockito.verification.VerificationMode verificationMode) throws Exception
Exception
- If something unexpected goes wrong.Mockito#verify(Object)}
public static <T> ConstructorArgumentsVerification verifyNew(Class<T> mock)
Alias to verifyNew(mockClass, times(1))
E.g:
verifyNew(ClassWithStaticMethod.class);Above is equivalent to:
verifyNew(ClassWithStaticMethod.class, times(1));
mock
- Class mocked by PowerMock.public static <T> ConstructorArgumentsVerification verifyNew(Class<?> mock, org.mockito.verification.VerificationMode mode)
verifyNew(ClassWithStaticMethod.class, times(5)); verifyNew(ClassWithStaticMethod.class, atLeast(2)); //you can use flexible argument matchers, e.g: verifyNew(ClassWithStaticMethod.class, atLeastOnce());times(1) is the default and can be omitted
mock
- to be verifiedmode
- times(x), atLeastOnce() or never()public static <T> org.mockito.stubbing.OngoingStubbing<T> when(Object instance, String methodName, Object... arguments) throws Exception
Exception
- If something unexpected goes wrong.Mockito#when(Object)}
public static <T> WithOrWithoutExpectedArguments<T> when(Object instance, Method method) throws Exception
Exception
- If something unexpected goes wrong.Mockito#when(Object)}
public static <T> WithOrWithoutExpectedArguments<T> when(Class<?> cls, Method method) throws Exception
Exception
- If something unexpected goes wrong.Mockito#when(Object)}
public static <T> org.mockito.stubbing.OngoingStubbing<T> when(Object instance, Object... arguments) throws Exception
Exception
- If something unexpected goes wrong.Mockito#when(Object)}
public static <T> org.mockito.stubbing.OngoingStubbing<T> when(Class<?> clazz, String methodToExpect, Object... arguments) throws Exception
Exception
- If something unexpected goes wrong.Mockito#when(Object)}
public static <T> org.mockito.stubbing.OngoingStubbing<T> when(Class<?> klass, Object... arguments) throws Exception
Exception
- If something unexpected goes wrong.Mockito#when(Object)}
public static <T> org.mockito.stubbing.OngoingStubbing<T> when(T methodCall)
Mockito.when(Object)
method.
Mockito#when(Object)}
public static <T> WithOrWithoutExpectedArguments<T> whenNew(Constructor<T> ctor)
public static <T> ConstructorExpectationSetup<T> whenNew(Class<T> type)
public static <T> ConstructorExpectationSetup<T> whenNew(String fullyQualifiedName) throws Exception
fullyQualifiedName
- The fully-qualified name of the inner/local/anonymous type to
expect.
Exception
public static void verifyNoMoreInteractions(Object... mocks)
Mockito.verifyNoMoreInteractions(Object...)
if the mock is not a
PowerMockito mock.
You can use this method after you verified your mocks - to make sure that nothing else was invoked on your mocks.
See also Mockito.never()
- it is more explicit and communicates
the intent well.
Stubbed invocations (if called) are also treated as interactions.
A word of warning: Some users who did a lot of classic, expect-run-verify mocking tend to use verifyNoMoreInteractions() very often, even in every test method. verifyNoMoreInteractions() is not recommended to use in every test method. verifyNoMoreInteractions() is a handy assertion from the interaction testing toolkit. Use it only when it's relevant. Abusing it leads to overspecified, less maintainable tests. You can find further reading here.
This method will also detect unverified invocations that occurred before the test method, for example: in setUp(), @Before method or in constructor. Consider writing nice code that makes interactions only in test methods.
Example:
//interactions mock.doSomething(); mock.doSomethingUnexpected(); //verification verify(mock).doSomething(); //following will fail because 'doSomethingUnexpected()' is unexpected verifyNoMoreInteractions(mock);See examples in javadoc for
Mockito
class
mocks
- to be verifiedpublic static void verifyZeroInteractions(Object... mocks)
Mockito.verifyNoMoreInteractions(Object...)
if the mock is not a
PowerMockito mock.
verifyZeroInteractions(mockOne, mockTwo);This method will also detect invocations that occurred before the test method, for example: in setUp(), @Before method or in constructor. Consider writing nice code that makes interactions only in test methods.
See also Mockito.never()
- it is more explicit and communicates
the intent well.
See examples in javadoc for Mockito
class
mocks
- to be verifiedpublic static PowerMockitoStubber doAnswer(org.mockito.stubbing.Answer<?> answer)
Answer
.
Stubbing voids requires different approach from
Mockito.when(Object)
because the compiler does not like void
methods inside brackets...
Example:
doAnswer(new Answer() { public Object answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); Mock mock = invocation.getMock(); return null; } }).when(mock).someMethod();
See examples in javadoc for Mockito
class
answer
- to answer when the stubbed method is called
public static PowerMockitoStubber doThrow(Throwable toBeThrown)
Stubbing voids requires different approach from
Mockito.when(Object)
because the compiler does not like void
methods inside brackets...
Example:
doThrow(new RuntimeException()).when(mock).someVoidMethod();
toBeThrown
- to be thrown when the stubbed method is called
public static PowerMockitoStubber doCallRealMethod()
As usual you are going to read the partial mock warning: Object oriented programming is more less tackling complexity by dividing the complexity into separate, specific, SRPy objects. How does partial mock fit into this paradigm? Well, it just doesn't... Partial mock usually means that the complexity has been moved to a different method on the same object. In most cases, this is not the way you want to design your application.
However, there are rare cases when partial mocks come handy: dealing with code you cannot change easily (3rd party interfaces, interim refactoring of legacy code etc.) However, I wouldn't use partial mocks for new, test-driven & well-designed code.
See also javadoc Mockito.spy(Object)
to find out more about
partial mocks. Mockito.spy() is a recommended way of creating partial
mocks. The reason is it guarantees real methods are called against
correctly constructed object because you're responsible for constructing
the object passed to spy() method.
Example:
Foo mock = mock(Foo.class); doCallRealMethod().when(mock).someVoidMethod(); // this will call the real implementation of Foo.someVoidMethod() mock.someVoidMethod();
See examples in javadoc for Mockito
class
public static PowerMockitoStubber doNothing()
1. Stubbing consecutive calls on a void method:
doNothing().doThrow(new RuntimeException()).when(mock).someVoidMethod(); //does nothing the first time: mock.someVoidMethod(); //throws RuntimeException the next time: mock.someVoidMethod();2. When you spy real objects and you want the void method to do nothing:
List list = new LinkedList(); List spy = spy(list); //let's make clear() do nothing doNothing().when(spy).clear(); spy.add("one"); //clear() does nothing, so the list still contains "one" spy.clear();
See examples in javadoc for Mockito
class
public static PowerMockitoStubber doReturn(Object toBeReturned)
Mockito.when(Object)
.
Beware that Mockito.when(Object)
is always recommended for
stubbing because it is argument type-safe and more readable
(especially when stubbing consecutive calls).
Here are those rare occasions when doReturn() comes handy:
1. When spying real objects and calling real methods on a spy brings side effects
List list = new LinkedList(); List spy = spy(list); //Impossible: real method is called so spy.get(0) throws IndexOutOfBoundsException (the list is yet empty) when(spy.get(0)).thenReturn("foo"); //You have to use doReturn() for stubbing: doReturn("foo").when(spy).get(0);2. Overriding a previous exception-stubbing:
when(mock.foo()).thenThrow(new RuntimeException()); //Impossible: the exception-stubbed foo() method is called so RuntimeException is thrown. when(mock.foo()).thenReturn("bar"); //You have to use doReturn() for stubbing: doReturn("bar").when(mock).foo();Above scenarios shows a tradeoff of Mockito's ellegant syntax. Note that the scenarios are very rare, though. Spying should be sporadic and overriding exception-stubbing is very rare.
See examples in javadoc for Mockito
class
toBeReturned
- to be returned when the stubbed method is called
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |