blob: 013004faef706569d01b0ec1df82353e72b1196a [file] [log] [blame]
==========================
Class and Function Mocking
==========================
This file documents class and function mocking features.
.. note::
If possible, prefer class mocking over arbitrary function mocking. Class
mocking has a much more limited scope and provides more control.
This file documents class mocking and most mocking features that do not
depend on function or platform mocking.
Readability Macros
------------------
When defining and declaring mock stubs, use these readability macros.
.. code-block:: c
#define CLASS(struct_name) struct_name
#define HANDLE_INDEX(index) index
#define METHOD(method_name) method_name
#define RETURNS(return_type) return_type
#define PARAMS(...) __VA_ARGS__
Consider a ``struct Foo`` with a member function
``int add(struct Foo*, int a, int b);``
When generating a mock stub with :c:func:`DEFINE_STRUCT_CLASS_MOCK`, which
takes a method name, struct name, return type, and method parameters, the
arguments should be passed in with the readability macros.
.. code-block:: c
DEFINE_STRUCT_CLASS_MOCK(
METHOD(add),
CLASS(Foo),
RETURNS(int),
PARAMS(struct Foo *, int, int)
);
For a more detailed example of this, take a look at the example in
:doc:`../start`
These macros should only be used in the context of the mock stub generators.
Built in Matchers
-----------------
.. kernel-doc:: include/test/mock.h
:doc: Built In Matchers
Mock Returns
------------
These functions can be used to specify a value to be returned (``ret``) when a
mocked function is intercepted via :c:func:`EXPECT_CALL`.
.. code-block:: c
struct mock_action *int_return(struct test *test, int ret);
struct mock_action *u32_return(struct test *test, u32 ret);
API
---
.. kernel-doc:: include/test/mock.h
:internal: