Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/06/2009, à 20:48

zedtux

[Résolu] C++ et CppUnit: unknown throwed exception ?

Salut à tous !

Je suis avec CPPUNIT là.
Je veux tester une méthode generateMd5() d'une classe qui peux faire un throw d'une classe que j'ai créé.
Je précise que ca fonctionne très bien dans toutes les autres classes. Y a que dans celle là que ca fonctionne pas.

Donc en gros, le but du test c'est ne pas définir de chemin de fichier, et la generateMd5() DOIT faire un throw de XtmException.

J'ai donc écrit mon test comme ca :

CPPUNIT_ASSERT_THROW( validator.generateMd5(), XtmException );

Mais dans le terminal, quand j'execute mon teste unitaire:

filevalidatortest.cpp:10:Assertion
Test name: FileValidatorTest::noFileMd5Test
expected exception not thrown
- Expected: XtmException
- Actual  : unknown.

Alors j'ai essayé un try catch :

try
{
     validator.generateMd5();
} catch( std::exception &e )
{
     CPPUNIT_FAIL("std::exception: Perdu !");
} catch( XtmException &ex )
{
     CPPUNIT_FAIL("XtmException: Gagné !");
} catch(...)
{
     CPPUNIT_FAIL("...: Perdu !");
}

Et ca me sort :

filevalidatortest.cpp:21:Assertion
Test name: FileValidatorTest::noFileMd5Test
forced failure
- ...: Perdu !

Et voici le code de la methode generateMd5():
( C'est la ligne throw new XtmException("No file to validate have been defined !"); qui doit remonté dans le try catch )

/**
 *  \brief Generate Md5 Hash
 *
 *  \param startPosition Position where start to read the file
 *  \param octetToIgnoreAtTheEnd Number of octets to ignore at the end of file (Should be use to ignore footer)
 *
 *  \return True if MD5 Hash have been generated
 */
bool FileValidator::generateMd5( long startPosition, long octetToIgnoreAtTheEnd )
{
	char * buffer = new char [BUFFER_SIZE];
	char * hex_output = (char *)malloc(33);
	unsigned char digest[MD5_DIGEST_LENGTH];
	long fileSize = 0;
	
	if ( startPosition > 0 )
	{
		std::cout << "FileValidator::generateMd5(): Start position is " << startPosition << std::endl;
	}
	
	//~ Initialize MD5 buffer
	MD5_CTX ctx;
	MD5_Init( &ctx );
	
	if ( fileToValidate.getFilePath().empty() )
	{
		throw new XtmException("No file to validate have been defined !");
	}
	
	std::ifstream input( fileToValidate.getFilePath().c_str(), std::ios::in | std::ios::binary );
	if ( !input.is_open() )
	{
		//~ throw new XtmException(LIBXTM_CLASSNAME_FILEVALIDATOR, __FUNCTION__, "Unable to open file " + fileToValidate.getName());
		std::cout << "Unable to open file " << fileToValidate.getName() << std::endl;
	}
	
	if ( octetToIgnoreAtTheEnd > 0 )
	{
		//~ Get file size to calculate Footer position
		input.seekg( 0, std::ios::end );
		fileSize = input.tellg();
	}
	
	input.seekg( startPosition );
	
	while ( int count = input.readsome( buffer, BUFFER_SIZE ) )
	{
		if ( octetToIgnoreAtTheEnd > 0 )
		{
			if ( input.tellg() == fileSize )
			{
				count = count - octetToIgnoreAtTheEnd;
			}
		}
		
		//~ Fill MD5 buffer with the readed file content
		MD5_Update( &ctx, buffer, count );
	}
	
	input.close();
	
	delete[] buffer;
	
	//~ Get the digets
	MD5_Final( digest, &ctx );
	
	//~ Convert it to standard format
	for ( int di = 0; di < 16; di++ )
	{
		sprintf( hex_output + di * 2, "%02x", digest[di] );
	}
	
	generatedMd5 = hex_output;
	
	return true;
}

RECOLLER VOS FICHIERS XTM AVEC TUXTREMSPLIT !!
Adhérant April numéro 4985 [Rejoindre l'April moi aussi !].

Hors ligne

#2 Le 07/06/2009, à 00:05

rniamo

Re : [Résolu] C++ et CppUnit: unknown throwed exception ?

c'est pas l'erreur mais pourquoi des new ou des malloc pour des tailles fixes ? d'ailleurs pourquoi new et malloc ? je sais c'est pareil pour des char mais bon ...

sinon tu fasi catch( XtmException &ex ) donc tu veux catcher un xtmexception ... mais tu lève via throw new blabla ... donc un pointeur ... tu fais trop de java ? enlève le new et ajoute un const dans ton catch wink ... et décommente la ligne où tu le fais wink

Dernière modification par rniamo (Le 07/06/2009, à 00:05)


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#3 Le 07/06/2009, à 02:33

zedtux

Re : [Résolu] C++ et CppUnit: unknown throwed exception ?

Ok, merci, ca fonctionne sans le new.

Par contre, je ne comprend pas pourquoi pour tout les autres ca fonctionnait alors ?


RECOLLER VOS FICHIERS XTM AVEC TUXTREMSPLIT !!
Adhérant April numéro 4985 [Rejoindre l'April moi aussi !].

Hors ligne