Esiste un nome accettato per un oggetto falso iniettato tramite una cucitura del preprocessore?

1

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.

    
posta Kazark 23.02.2013 - 00:14
fonte

3 risposte

2

Questa domanda è durata quasi due mesi senza nulla se non risposte generiche, quindi ritengo che questo non sia un modello noto con un nome esistente. Pertanto suggerisco il nome Preprocessore Partial Mock , per indicare che viene iniettato tramite una cucitura del preprocessore ed è solo un'implementazione parziale della classe che viene derisa.

    
risposta data 15.04.2013 - 21:19
fonte
2

" Oggetto Mock " è un termine comune.

Gli oggetti falsi forniscono comunemente un set di stub di metodi, restituendo valori preimpostati.

Gli oggetti fittizi di solito sono più ricchi nel loro comportamento, imitando un insieme più completo del comportamento dell'oggetto reale.

    
risposta data 23.02.2013 - 14:48
fonte
1

Potresti usare il termine generico "Fake" qui.
D'altra parte, "Stub" è anche un buon nome. La tua descrizione della classe fasulla si adatta bene alla definizione di stub su wikipedia .

    
risposta data 23.02.2013 - 10:34
fonte

Leggi altre domande sui tag