| .. SPDX-License-Identifier: GPL-2.0 | |
| ========================== | |
| 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: |