Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mocking a file write process in googlemock

I am just starting with mocking using googlemock for a C++ project. In my case, my class to be tested observes a file that is written to, and whenever a minimal amount of new data has been written, it starts doing some work.

What I need is a mock class for the process writing to the file. As far as I understand things, I need to completely implement this "writing to file" functionality in form of (for googlemock) a virtual class from which a mock class is derived? The mock wrapper is finally used for testing and evaluation purposes, right?

Thanks for help!

like image 460
gilgamash Avatar asked Nov 22 '25 17:11

gilgamash


2 Answers

Mocks, in google mock terms, are objects used to validate that your code under test performs certain operations on them.

What you describe is not a mock, but a utility class that triggers your code under test operations.

What does your class do when it detects that the file it observes is written to? If, for instance, it performs a call to another object, then you could use a mock object to check that it gets called with the right parameters, e.g. the new bulk of data written to the file.

like image 192
Antonio Pérez Avatar answered Nov 25 '25 07:11

Antonio Pérez


I am assuming that an object of your "observer" class is notified that minimal amount of data has been written by an object of the "writter" class. In that case, you need to implement an abstract class that represents an interface for your "writter" class, and have your real "writter" class inherit from it and override its virtual functions. Also, have your mock "writter" class implementation inherit from this interface and and create mock implementations using MOCK_METHODn.

Then, have your "observer" class receive notifications from "writter" object using a pointer to the abstract class. This way, you can use dependency injection to switch implementation during testing phase by creating a mock "writter" object and passing its address to "observer" object (instead of an address to a real "writter" object) and setup test cases using EXPECT_CALL on the mock object.

This is the best advice I can give since you did not provide us with a detailed description of your classes.

EDIT:

Concerning the implementation of your real "writter" class: You do not have to create it immediately, you can use the mock class for now to test the behavior of the "observer" class and leave the implementation for later. You will, of course, have to implement it eventually since it has to be used in production code.

like image 34
Marko Popovic Avatar answered Nov 25 '25 06:11

Marko Popovic



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!