Je suis vraiment nouveau pour les tests unitaires, et j'ai le programme vraiment de base suivante:C++ tests unitaires en utilisant Boost
#include "stdafx.h"
// classes example
#include <iostream>
using namespace std;
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area() {return (x*y);}
bool isEq();
};
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
bool CRectangle::isEq() {
if(x==y)
{
return true;
}
else
{
return false;
}
}
int main() {
CRectangle rect;
rect.set_values (3,3);
cout << "area: " << rect.area();
cout << " isEq: " << rect.isEq() << " \n";
return 0;
}
Je veux savoir comment puis-je tester la méthode isEq? Je veux 100% de couverture de code de cette méthode et je veux utiliser le cadre de test Boost. Des idées? J'utilise VS 2009 SP1, que puis-je construire et exécuter? Je suis très confus avec les tests unitaires.
MISE À JOUR:
Merci Stuart, mais ce que Im faire est toujours pas donner un sens. Je sais avoir le code suivant avec les noms de fichiers suivants:
//FILENAME: test.cpp
#include "stdafx.h"
#define BOOST_TEST_MODULE isEq Test
#include <boost/test/included/unit_test.hpp>
#include "CRectangle.h"
BOOST_AUTO_TEST_CASE(isEq_test)
{
CRectangle rect;
rect.set_values(5,5);
BOOST_CHECK_EQUAL(rect.isEq(), true);
rect.set_values(23,9);
BOOST_CHECK_EQUAL(rect.isEq(), false);
}
// FILENAME: CRectangle.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "CRectangle.h"
//#include <boost/test/included/unit_test.hpp>
// classes example
#include <iostream>
using namespace std;
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
bool CRectangle::isEq() {
if(x==y)
{
return true;
}
else
{
return false;
}
}
int main() {
CRectangle rect;
rect.set_values (3,3);
cout << "area: " << rect.area();
cout << " isEq: " << rect.isEq() << " \n";
return 0;
}
//FILENAME: CRectangle.h
//void CRectangle::set_values (int a, int b);
//bool CRectangle::isEq();
#ifndef CRECTANGLE_H
#define CRECTANGLE_H
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area() {return (x*y);}
bool isEq();
};
#endif
// FILENAME: stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
#ifdef _UT
#define ut_private public
#define ut_protected public
#else
#define ut_private private
#define ut_protected protected
#endif
Je veux vous rappeler que je suis en utilisant Visual Studio 2008 SP1 (Exécution de ce projet en tant qu'application console Win32). Chaque fois que je construis les fichiers suivants, il me donne des erreurs. Je ne sais pas non plus comment le Boost lib est censé me donner les résultats de mon test ??? Est-ce qu'une nouvelle fenêtre s'ouvrira ??? Que va-t-il se passer exactement?
Merci pour votre réponse, mais je suis toujours confus, quel entête je suis destiné à inclure? Suis-je censé écrire le fichier d'en-tête moi-même. Je ne suis pas un programmeur C++ par métier, cependant je sais c relativement bien. – user531571
Où puis-je mettre le code que vous avez écrit ci-dessus? Dois-je le mettre dans un autre fichier. Cpp? ou le même fichier que le code que j'ai écrit dans mon premier post (nom demonstration.cpp). Aussi, comment écrivez-vous mon fichier d'en-tête? – user531571
Par "inclure l'en-tête", je voulais dire celui du code ci-dessus, c'est-à-dire "boost/test/included/unit_test.hpp".La façon dont j'ai structuré les choses était d'avoir une bibliothèque avec toutes les choses que je voulais tester, puis j'ai écrit le programme principal et un ensemble de programmes de tests unitaires qui étaient liés à la bibliothèque. Chaque programme de test unitaire ressemble un peu à ce qui précède, mais inclut le fichier d'en-tête de tout ce que vous essayez de tester, par exemple. '#include" CRectangle.h "'. Vous n'avez pas besoin d'une fonction 'main' dans vos programmes de test - Boost.Test gère tout automatiquement - vous avez juste besoin d'écrire le genre de chose montré ci-dessus. –