2010-10-21 13 views
0

Je suis en train de me lancer dans le développement piloté par les tests avec des objets fantaisie. Je peux le faire le long chemin avec UnitTest ++, mais maintenant je veux essayer de minimiser la frappe, et j'essaie d'utiliser AMOP maquette pour faire le moqueur.Comment créer un objet fantaisie sans classe d'interface dans AMOP?

AMOP états:

Les principales différences entre AMOP et d'autres librairie d'objet fantaisie est que, utilisateurs ne doivent implémenter l'interface de l'objet à maquette ...

Cependant, je ne peux pas comprendre cela. La page d'utilisation de base montre toujours une classe IInterface. Toute personne capable de le faire sans utiliser une classe d'interface?

Répondre

2

Pour ce que j'ai vu dans la documentation, il n'a en fait pas besoin de l'objet fictif pour implémenter une interface. L'objet moqueur est construit sur la base de l'interface de l'objet d'origine, mais pas par héritage, mais en tant que paramètre de la classe:

TMockObject<IInterface> mock; 

Aucun héritage ici et TMockObject ne soit pas lié à une interface en héritage. Ensuite, l'ajout de méthodes simulées à mettre en œuvre par l'objet simulé:

mock.Method(&IInterface::SimpleFunction); 
mock.Method(&IInterface::SimpleFunctionWithAlotParams); 

((IInterface*)mock)->SimpleFunction(); 
((IInterface*)mock)->SimpleFunctionWithAlotParams(0, 0, 0, 0, std::string()); 

Encore une fois, l'objet mock ne hérite pas réellement l'interface. Il peut redéfinir l'opérateur de conversion à IInterface* (il renverra un objet interne IInterface).

Je ne vois pas beaucoup d'avantages à ne pas hériter de l'interface, mais de toute façon. J'aurais préféré un modèle en fonction de membre de TMockObject pour donner plus de sens à CAST laid (non testé, juste une idée):

template <typename I> 
I* as(void) 
{ 
    return m.internal_interface_pointer_; 
} 

vous pourriez donc écrire quelque chose comme:

mock.as<IInterface>()->SimpleFunction(); 

mais encore ...

+0

Ahh, votre explication a éclairci certaines choses dans ma tête. Merci. –

0

C'est la première fois que j'entends dire qu'une fausse structure n'a pas besoin d'une interface pour créer des objets fantaisie. Tous les autres le font. Doit être un bug dans la documentation.