2017-06-05 1 views
1

Je commence juste avec Cmocka, je suis bloqué sur ce problème depuis un moment maintenant. J'ai un projet cmocka que j'essaye de construire. Je vois l'erreur quand j'essaie d'utiliser 'make'.Cmocka - Erreur: Non Entrées pour le symbole

[ ERROR ] --- No entries for symbol __wrap_i2c_read.

Aussi je vois une erreur dans le fichier mock_i2c.c à la ligne où j'appelle mock()

Could not get value to mock function __wrap_i2c_read.

En ce moment je suis juste essayer de se moquer d'une valeur vrai/faux pour obtenir ça marche. Donc, mes regards simulacres comme

bool __wrap_i2c_read(void) 
{ 
    return (mock()); 
} 

j'ai vérifié dans mon test, je vous appelle will_return(__wrap_i2c_read, true);

Dans mon Makefile je LDFLAGS += -Wl,--wrap=i2c_read Je cmocka.h inclus dans le fichier mock_i2c.c.

Cela ne semble pas être un problème spécifique pour cette fonction de simulation, car si je ne l'utilise pas, j'obtiens la même erreur pour les autres fonctions fictives de ce fichier. Je ne suis pas sûr de ce que d'autres informations sont nécessaires, s'il vous plaît faites le moi savoir. Quelqu'un sait ce que cela signifie/vu cela avant?

Merci.

Edit: Donc je pense avoir compris pourquoi je reçois cette erreur. J'ai une boucle for dans la fonction que je suis en train de tester. Les fonctions simulées sont appelées depuis cette fonction. Une fois que j'ai supprimé la boucle, l'erreur disparaît. Est-ce que cela a quelque chose à voir avec comment/quand le will_return met en file d'attente les valeurs fictives? Et la boucle for est dans le chemin? Edit2: Ok, donc il semble que je ne faisais pas assez de files d'attente.

Répondre

0

Votre édition 2 est la clou!

Vous devez appeler'will_return 'aussi souvent que vous appelez' mock '.

Pour chaque appel de votre FUT (fonction en cours de test), le mot de passe() est appelé. Vous devez donc utiliser'will_return 'avant d'appeler votre FUT aussi souvent que vous appelez votre FUT. 'will_return 'met un élément sur une pile. Amock() 'prendra un élément de cette pile. Ainsi, appeler deux fois 'will_return' et 'mock()' deux fois entraînera un sous-dépassement qui se terminera dans votre erreur de type cmocka.

Si vous souhaitez utiliser'will_return_always 'ou'will_return_count'

edit: Désolé pour le mauvais surlignage. Assis dans la cuisine et en tapant sur mon smartphone n'est pas si confortable. Je vais le béatifier plus tard sur mon ordinateur.