简体   繁体   中英

CppUMock for mocking open() function

Is it possible to mock the C open() function using CppUTest?

#include "CppUTest/CommandLineTestRunner.h"
#include "CppUTest/TestHarness.h"
#include "CppUTestExt/MockSupport.h"
#include <fcntl.h>

extern "C"
{
#include "drivers/my_driver.h"
}

TEST_GROUP(Driver)
{
    void teardown() {
        mock().clear();
    }
};

int open(const char *__path, int __oflag, ...)
{
    return int(mock().actualCall(__func__)
        .withParameter("__path", __path)
        .withParameter("__oflag", __oflag)
        .returnIntValue());
}

TEST(Driver, simpleTest)
{
    mock().expectOneCall("open")
          .withParameter("/dev/sys/my_hw", O_RDWR)
          .andReturnValue(1);

    mock().checkExpectations();

    bool r = open_driver();
    CHECK_TRUE(r);
}

int main(int ac, char** av)
{
    return CommandLineTestRunner::RunAllTests(ac, av);
}

And here is my open_driver() functions:

#include "drivers/my_driver.h"
#include <string.h>
#include <fcntl.h>

bool open_driver() {
    int fd_driver = open("/dev/iost/mast", O_RDWR);
    char msg[255] = {0};

    if(fd_driver == -1)
        return false;

    return true;
}

For now, I obtain the following error:

/home/.../open_driver.cpp:26: error: Failure in TEST(Driver, simpleTest)
        Mock Failure: Expected call WAS NOT fulfilled.
        EXPECTED calls that WERE NOT fulfilled:
                open -> int /dev/sys/my_hw: <2 (0x2)> (expected 1 call, called 0 times)
        EXPECTED calls that WERE fulfilled:
                <none>

.
Errors (1 failures, 1 tests, 1 ran, 1 checks, 0 ignored, 0 filtered out, 0 ms)

Use compiler option --wrap to handle this scenario. For detail refer below link: How to wrap functions with the `--wrap` option correctly?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM