// // Listing 3: "Visitable" Mock-Objekte // #include "interface.h" #include "consumer.h" #include #include #include class VisitMock : public Interface , public mockpp::VisitableMockObject { public: VisitMock() : mockpp::VisitableMockObject(MOCKPP_PCHAR("VisitMock"), 0) , MOCKPP_CONSTRUCT_MEMBERS_FOR_VOID_VISITABLE_EXT1(open, ext) , MOCKPP_CONSTRUCT_MEMBERS_FOR_VISITABLE0(read) , MOCKPP_CONSTRUCT_MEMBERS_FOR_VOID_VISITABLE_EXT1(write, ext) , MOCKPP_CONSTRUCT_MEMBERS_FOR_VOID_VISITABLE0(close) {} MOCKPP_VOID_VISITABLE_EXT1(VisitMock, open, const std::string &, ext, std::string); MOCKPP_VISITABLE0(VisitMock, std::string, read); MOCKPP_VOID_VISITABLE_EXT1(VisitMock, write, const std::string &, ext, std::string); MOCKPP_VOID_VISITABLE0(VisitMock, close); }; int main(int argc, char **argv) { try { VisitMock mock; MOCKPP_CONTROLLER_FOR(VisitMock, read) read_controller (&mock); // Ablauf beim Einlesen "aufzeichnen" mock.open("datei1.lst"); mock.read(); mock.read(); mock.read(); mock.close(); // Rückgabewerte für read() eintragen read_controller.addReturnValue("Datenpaket-1"); read_controller.addReturnValue("Datenpaket-2"); read_controller.addReturnValue("Datenpaket-3"); // Ablauf beim Zurückschreiben "aufzeichnen" mock.open("datei1.lst"); mock.write("Datenpaket-1/fertig"); mock.write("Datenpaket-2/fertig"); mock.write("Datenpaket-3/fertig"); mock.close(); // Mock-Objekt aktivieren mock.activate(); // Consumer-Klasse ablaufen lassen std::cout << "Start der Tests" << std::endl; Consumer consumer(&mock); consumer.load(); consumer.process(); consumer.save(); std::cout << "Ende der Tests" << std::endl; // alle restlichen Bedingungen prüfen mock.verify(); std::cout << "Alle Tests wurden fehlerfrei durchlaufen" << std::endl; } catch(std::exception &ex) { std::cout << std::endl << "Fehler aufgetreten.\n" << ex.what() << std::endl << std::endl; } }