I have a class, which registers private methods of itself with other classes to be used as callbacks. This utilises std::bind to create an std::function that points to the private method.
Example: (names are not actual class names)
class DataProcessor {
private:
void callback() {
// Do something
};
public:
DataProcessor(IDataSupplier supplier) {
supplier.subscribe(std::bind(&DataProcessor::callback, this));
};
};
Now I want to verify that the callback function performs the correct actions. I use gtest for my tests, and create a mock of IDataSupplier with gmock to create this object with.
I can't call DataProcessor::callback() directly, since it is private when viewed from the test. I would prefer not to change DataProcessor for my test.
Normally, the callback is accessible because IDataSupplier has access to the std::function object that wraps the private method. Because I have a mocked version of IDataSupplier, I don't think I'm able to capture the callback that was given to it (and again, it feels wrong to have to rely on this; what if gmock stops allowing me to get the provided std::function?)
So my questions boil down to these two:
- Am I doing A Bad Thing (tm) by trying to test a private callback method?
- How should I approach testing this callback, if I should do it at all?
Aucun commentaire:
Enregistrer un commentaire