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
PARAMS(struct Foo *, int, int)
For a more detailed example of this, take a look at the example in
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);
.. kernel-doc:: include/test/mock.h