Ho a che fare con un codice C ++ vecchio e sciatto in cui esiste una struttura con molti membri e funzioni dati. Voglio testare una classe che ho implementato che usa la struct, ma questa dipendenza renderà i test dell'unità estremamente brutti. Ispirato dalla discussione di Michael Feather sulle cuciture di pre-elaborazione in Lavorare efficacemente con il codice legacy , mi sto preparando a risolvere questo problema fingendo la brutta struttura con il preprocessore (non con l'ereditarietà) polimorfismo come dimostrato nel seguente codice nozionale.
test.cpp
#include <iostream>
#include "NotAsUgly.hpp"
#include "DependsOnUgly.hpp"
int main() {
std::cout << DependsOnUgly().getDescription() << std::endl;
}
DependsOnUgly.hpp
#ifndef _DEPENDS_ON_UGLY_HPP_
#define _DEPENDS_ON_UGLY_HPP_
#include <string>
#include "Ugly.hpp"
class DependsOnUgly {
public:
std::string getDescription() {
return "Depends on " + Ugly().getName();
}
};
#endif
Ugly.hpp
#ifndef _UGLY_HPP_
#define _UGLY_HPP_
struct Ugly {
double a, b, ..., z;
void extraneousFunction { ... }
std::string getName() { return "Ugly"; }
};
#endif
NotAsUgly.hpp
#ifndef _UGLY_HPP_ // Same name as in Ugly.hpp---deliberately!
#define _UGLY_HPP_
struct Ugly { // Once again, duplicate name is deliberate
std::string getName() { return "not as ugly"; } // All that DependsOnUgly depends on
};
#endif
Esiste un nome speciale per il tipo di oggetto falso che sto usando qui? Sono propenso a definirlo un mozzicone, ma è piuttosto diverso da quello che normalmente considererei un mozzicone. Mi aspetterei che qualcosa venga chiamato stub per implementare l'interfaccia della classe che deve essere simulata attraverso l'ereditarietà. Qui l'implementazione è solo parziale e avviene attraverso il preprocessore.
Esiste già un nome noto per questo tipo di oggetto falso / di prova? Voglio nominare il file di intestazione che lo contiene ( NotAsUgly.hpp
nel mio esempio) per indicare correttamente agli altri sviluppatori a cosa serve.