2 votes

Est-il prudent d'implémenter dans votre exécutable une méthode statique qui est déjà implémentée dans une bibliothèque partagée ?

Nous utilisons beaucoup de bibliothèques partagées dans notre code. Dans ce cas particulier, une méthode statique est implémentée dans l'une de ces bibliothèques. Nous appelons cette méthode à différents endroits de notre code. Cependant, si nous voulons tester, nous aimerions isoler le processus, donc simuler l'implémentation de cette méthode.

Pour ce faire, nous envisageons de réimplémenter la méthode dans le binaire de test. Cela permettrait de s'assurer que notre implémentation est prise en compte à la place de celle de la librairie.

La question principale est la suivante : S'agit-il d'un mal absolu ? Dans l'affirmative, quelle est la solution à privilégier dans ce cas ?

Un exemple...

En-tête de la bibliothèque partagée :

static const bool theMethod(...);

Mise en œuvre de la méthode dans la bibliothèque partagée :

static const bool theMethod(...){
  //The real implemetation does some fancy stuff here
  return theRealValue;
}

Notre cas d'école :

#include <headerOfTheMethod.hpp>

//Our own "mocked" implementation
static const bool theMethod(...){
  return true; //Lets say we always return true for the purpose of our test
}

//Here comes our code testing the class which is using that particular method

Note complémentaire : nous utilisons gcc comme compilateur, les bibliothèques sont liées dynamiquement.

UPDATE : Si c'était le cas pour les méthodes statiques. Ce serait un bon début, mais que se passerait-il s'il s'agissait d'une fonction membre d'une classe ?

2voto

Mark Ransom Points 132545

Vous enfreindriez la Règle de la définition unique . Compte tenu de la manière dont fonctionnent les linkers, il est possible que cela fonctionne pour vous, mais il s'agit d'un pari et il n'y a aucune garantie.

2voto

Nicholas Wilson Points 4464

Oui, c'est sûr, tant que.. :

  1. Votre méthode fonctionne de la même manière que celle que vous remplacez, de manière externe
  2. Vous évitez ainsi les erreurs de l'éditeur de liens. Consultez la documentation de votre compilateur, mais il devrait y avoir un moyen de rendre un symbole "faible", de sorte qu'il ne se plaindra pas de définitions multiples. Il s'agit d'un moyen standard de surcharger les fonctions dans les bibliothèques du système afin d'accéder aux appels, à des fins de test.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X