// // Listing 5: Mock-Objekte für Arme // #include "interface.h" #include "consumer.h" #include #define ASSERTER(x) \ if (!(x) ) { \ std::cout << std::endl \ << "Fehler aufgetreten.\n" << #x << std::endl \ << std::endl \ << std::flush; \ exit(1); \ } class PoorMock : public Interface { public: PoorMock() { counter = 0; open_counter = 0; read_counter = 0; write_counter = 0; close_counter = 0; } virtual void open(const std::string & /* name */) { open_counter = ++counter; } virtual std::string read() { read_counter = ++counter; return "dummy"; } virtual void write(const std::string & /* s */) { write_counter = ++counter; } virtual void close() { close_counter = ++counter; } unsigned counter; unsigned open_counter; unsigned read_counter; unsigned write_counter; unsigned close_counter; }; int main(int argc, char **argv) { PoorMock mock; // Consumer-Klasse ablaufen lassen std::cout << "Start der Tests" << std::endl; Consumer consumer(&mock); consumer.load(); ASSERTER(mock.open_counter == 1); ASSERTER(mock.read_counter == 4); ASSERTER(mock.close_counter == 5); consumer.process(); consumer.save(); ASSERTER(mock.open_counter == 6); ASSERTER(mock.write_counter == 9); ASSERTER(mock.close_counter == 10); std::cout << "Ende der Tests" << std::endl; std::cout << "Alle Tests wurden fehlerfrei durchlaufen" << std::endl; }