Mockito Concepts: Difference between revisions
(One intermediate revision by the same user not shown) | |||
Line 4: | Line 4: | ||
=Overview= | =Overview= | ||
The Mockito framework helps with the creation and management of external dependencies, and provides an API and annotations to create [[Mockito_Concepts#Managed_Test_Double|managed test doubles]], most often [[Software_Testing_Concepts#Mock|mock objects]]. Mockito works by dynamically creating proxies that intercept invocation into the [[Mockito_Concepts#Managed_Test_Double|managed test double]] objects and reacting the way they were programmed - return pre-defined answers, throw exceptions, | The Mockito framework helps with the creation and management of external dependencies, and provides an API and annotations to create [[Mockito_Concepts#Managed_Test_Double|managed test doubles]], most often [[Software_Testing_Concepts#Mock|mock objects]]. Mockito works by dynamically creating proxies that intercept invocation into the [[Mockito_Concepts#Managed_Test_Double|managed test double]] objects and reacting the way they were programmed - return pre-defined answers, throw exceptions, verify the invocation, etc. It provides a fluent API to express all these situations programmatically. Mockito uses internally [[CGLib]] to create proxy stubs. CGLib is used to generate dynamic poxy objects and intercept field access. | ||
=Implementation= | =Implementation= | ||
Line 11: | Line 11: | ||
=MockitoJUnitRunner= | =MockitoJUnitRunner= | ||
<font color=darkgray>Why do I need this? Won't the test run otherwise?</font> | |||
<syntaxhighlight lang='java'> | <syntaxhighlight lang='java'> | ||
@RunWith(MockitoJUnitRunner.class) | @RunWith(MockitoJUnitRunner.class) |
Latest revision as of 21:18, 2 September 2021
Internal
Overview
The Mockito framework helps with the creation and management of external dependencies, and provides an API and annotations to create managed test doubles, most often mock objects. Mockito works by dynamically creating proxies that intercept invocation into the managed test double objects and reacting the way they were programmed - return pre-defined answers, throw exceptions, verify the invocation, etc. It provides a fluent API to express all these situations programmatically. Mockito uses internally CGLib to create proxy stubs. CGLib is used to generate dynamic poxy objects and intercept field access.
Implementation
Mockito creates dynamic proxies based on the test double concrete class. Mockito has a MethodInterceptor
class that implements java.lang.reflect.InvocationHandler
and intercepts any method call on the managed mock object.
MockitoJUnitRunner
Why do I need this? Won't the test run otherwise?
@RunWith(MockitoJUnitRunner.class)
public class SomeTest {
@Test
public void someTestMethod() {
...
}
}
Mockito.mock()
@Mock
Can Mock
- Non-final classes
- Interfaces
Can't Mock
- Final classes
- Final methods
- Enums
- Static methods
- Private methods
hashCode()
andequals()
methods- Anonymous classes
- Primitive types
PowerMock can mock these constructs.
Managed Test Double
A test double managed by Mockito. It can be created either via the API with Mockito.mock(<object>)
or by annotating the field referencing the object in question with @Mock.