vendredi 7 mai 2010

Changement d'adresse !

Ce blog change d'adresse !
Vous pourrez le retrouvez dès aujourd'hui sur http://romain.therrat.fr (et oui je m'appelle Romain THERRAT !).

Tout les messages de ce blog on été importé et je le fermerai dans quelque jours.
Alors avant de recevoir un "N'habite plus à l'adresse indiquée" (Erreur 404 en jargon informatique !) bookmarqué mon nouveau blog.

A bientôt !

Romain

mercredi 28 avril 2010

[C++] Créer des tests unitaires en cpp avec Boost.Test

Si vous vous demandez encore pourquoi utiliser des tests unitaires ou encore ce que sont les tests unitaires je vous conseil vivement de vous renseigner et de revenir dans quelques minutes sur cette page !! Le web est une mine d'information infinie !!



Nous alons donc voir comment implémenter des tests unitaires en C++ avec la bibliothèque Boost qui contient entre autre la bibliothèque Boost.Test dont nous allons nous servir.



Tout d'abord il faut installer Boost. Si vous êtes sous visual studio il existe un fichier exécutable sur le site de Boost pour les distributions Linux vous devriez trouver les sources dans vos dépots.



Créez un nouveau projet "de test" qui ne sera rien d'autre qu'un projet C++ vide. Nommez le HelloWorldTest (Nom du projet à tester suivit de Test). Ceci n'est pas une obligation mais permet de se retrouver plus facilement quand on a beaucoup de projet dans un même dossier.


Ajoutez maintenant la librairie boost_unit_test_framework au liker (sous eclipse : bouton de droite sur votre projet, property, C/C++ Build, Settings, GCC C++ Linker, Librairies et ajouter boost_unit_test_framework).



Nous allons écrire notre premier fichier de tests. Pour cela créez un fichier Test.cpp (par exemple) et inscrivez dans celui ci ceci :



#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>


BOOST_TEST_DYN_LINK : Utiliser la bibliotheque dynamique de test de boost. (Celle que nous avons ajouter juste avant)
BOOST_TEST_MAIN : Genèrer une suite de tests principale (Master Test Suite)



Si vous compilez votre programme maintenant et que vous l'exécuter vous devriez avoir comme résultat


Test setup error: test tree is empty

Maintenant que nous avons un environnement de test fonctionnel nous allons passez à la rédaction de nos premiers tests.
Pour ceci renommer votre fichier Test.cpp en Test.h car à partir de maintenant nous l'inclurons dans tous nos fichiers de tests.
Dans votre programme à tester créez une classe Calculator avec des fonctions simples (add, sub, mul, div). Nous nous servirons de cette classe pour nos tests.



Dans votre programme de test créez un fichier CalculatorTest.cpp et incluez dans celui ci Test.h


#include "Test.h"

Nous avons besoins de faire référence à notre premier projet pour cela vous pouvez soit utiliser les fonctions de votre compilateur soit créer un lien symbolique de vos classes vers votre dossier source de test. Pour ma part, étant bien trop fainéant j'ai opté pour la deuxième solution. Mes classes étant dans le dossier Classes ceci me donne donc


ln -s ../HelloWorld/Classes/ ./

Nous rajoutons dans notre fichier CalculatorTest.cpp l'include de la classe que nous voulons tester.



#include "Classes/Calculator.h"

Et nous allons écrire un premier test !!




Pour cela nous allons utiliser plusieurs macro de Boost :
BOOST_AUTO_TEST_CASE : Qui va nous permettre de créer une "fonction virtuelle" de test
BOOST_REQUIRE_EQUAL : Qui va nous permettre de tester l'égalité d'un résultat et de retourner une valeur.
Ceci va ce présenter comme ça :


BOOST_AUTO_TEST_CASE(CalculatorAddTest1)
{
Calculator *myCalculator = new Calculator();
BOOST_REQUIRE_EQUAL(myCalculator->Add(1,2),3);//myCalculator->Add(1,2), 3);
}


Nous utilisons BOOST_AUTO_TEST_CASE pour créer une fonction de test que nous nommons CalculatorAddTest1. Nous créons un objet de type Calculator et le testons avec BOOST_REQUIRE_EQUAL.
Si vous compilez maintenant votre programme vous devriez obtenir un joli



Running 1 test case...

*** No errors detected


Il n'existe pas que BOOST_REQUIRE_EQUAL vous trouverez aussi BOOST_REQUIRE(expr), BOOST_REQUIRE_GE(left, right), BOOST_REQUIRE_GT(left, right), etc ... Vous pouvez trouvez la liste de ces macros dans la documentation de Boost.



Nous avons vu comment mettre en place un projet de tests unitaires avec Boost.Test ce qui est déjà pas mal pour aujourd'hui ! Nous continurons donc plus tard ;) !

dimanche 25 avril 2010

[Eclipse] Compiler un programme (C ou CPP) utilisant la GLib

Pour pouvoir compiler un programme utilisant la GLib avec eclipse il vous faut configurer des options pour le compilateur et le linker

Dans Eclipse
Bouton de droite sur votre projet, propriété, C/C++ Build, Setting
Dans l'onglet Tool Settings sélectionner GCC C++ Compilateur ou GCC C Compiler suivant si vous utiliser gcc ou g++.

Dans la textbox Command line pattern ajouter
`pkg-config --cflags glib-2.0`


De même dans GCC C/C++ Linker ajouter
`pkg-config --libs glib-2.0`
Et voilà vous pouvez enfin compiler votre application !

mardi 2 mars 2010

[Zend Studio] java.lang.IllegalArgumentException: Malformed \uxxxx encoding.

Aujourd'hui en tentant d'installer Zend Studio 7.1.1 sur ma debian squeeze, j'ai eu une petite erreur.

(19:14)romain@laptop-de-lermit:~>sudo Logiciel/ZendStudio7_1_1.bin
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

An internal LaunchAnywhere application error has occured and this application cannot proceed. (LAX)

Stack Trace:
java.lang.IllegalArgumentException: Malformed \uxxxx encoding.
at java.util.Properties.loadConvert(Unknown Source)
at java.util.Properties.load(Unknown Source)
at com.zerog.common.java.util.PropertiesUtil.loadProperties(DashoA8113)
at com.zerog.lax.LAX.(DashoA8113)
at com.zerog.lax.LAX.main(DashoA8113)


Ceci est dut à votre variable PS1 qui contient sûrement "\u" (représentant votre username).

Pour résoudre l'erreur il suffit de faire ceci


PS1=">"
sudo ./ZendStudio7_1_1.bin


Au prochain redémarrage de votre terminal votre prompt redeviendra normal.

vendredi 29 janvier 2010

[MySQL] Erreur "Cannot assign requested address"

Ajourd'hui j'ai été confronté à un petit problème :

Aucun serveur mysql lancé, rien qui n'écoute sur le port 3306, pas de fichier socket, ... et cette erreur :

100129 13:23:53 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
100129 13:23:53 [ERROR] Do you already have another mysqld server running on port: 3306 ?
100129 13:23:53 [ERROR] Aborting


La solution trouvé à été d'exécuter ceci

ifconfig lo up


Ceci réinitialise l'interface de loopback et permet de à MySQl de se "binder".

mercredi 13 janvier 2010

[MySQL] Mysql::Error: Table 'redmine.schema_info' doesn't exist: SELECT version FROM schema_info

Si vous installez une base de données via Rake comme redmine vous pourriez tomber sur une erreur de ce type :
Mysql::Error: Table 'redmine.schema_info' doesn't exist: SELECT version FROM schema_info

Le plus simple pour résoudre cette erreur est de supprimer et recréer la base.