CppUnit in NetBeans: Test läuft immer weiter

Alles was mit C/C++ unter NetBeans zu tun hat

Moderator: wegus

Antworten
Size
Beiträge: 30
Registriert: 08.05.2009, 23:04

CppUnit in NetBeans: Test läuft immer weiter

Beitrag von Size » 01.01.2012, 14:54

Hallo zusammen,

ich beschäftige mich nun schon seit einer Weile mit einem Problem im Zusammenhang mit CppUnit Tests. Ich habe folgende zwei Tests:

Code: Alles auswählen

#include "VectorOperationsTest.h"
#include "VectorOperations.h"


CPPUNIT_TEST_SUITE_REGISTRATION(VectorOperationsTest);

VectorOperationsTest::VectorOperationsTest() {
}

VectorOperationsTest::~VectorOperationsTest() {
}

void VectorOperationsTest::setUp() {
}

void VectorOperationsTest::tearDown() {
}

void VectorOperationsTest::testVectorDiff() {
    const size_t diff = 1;
    const size_t length = 5;
    size_t one = 2;
    gsl_vector* vectortoDiff;
    
    vectortoDiff = gsl_vector_alloc(length+1);
    gsl_vector_set_basis(vectortoDiff, one);
    
    
    VectorOperations vectorOperations;
    gsl_vector* result;
    result = vectorOperations.vectorDiff(diff, length, vectortoDiff);
    
    CPPUNIT_ASSERT(result->size == length);
    CPPUNIT_ASSERT(gsl_vector_get(result, 2) == 1);
}
mit Header

Code: Alles auswählen

#ifndef TIMODELSERVICETEST_H
#define	TIMODELSERVICETEST_H

#include <cppunit/extensions/HelperMacros.h>

class TIModelServiceTest : public CPPUNIT_NS::TestFixture {
    CPPUNIT_TEST_SUITE(TIModelServiceTest);

    CPPUNIT_TEST(testGenerateTradeIndicatorModel);

    CPPUNIT_TEST_SUITE_END();

public:
    TIModelServiceTest();
    virtual ~TIModelServiceTest();
    void setUp();
    void tearDown();

private:
    void testGenerateTradeIndicatorModel();

};

#endif
mit entsprechendem Runner:

Code: Alles auswählen

#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>

int main() {
    // Create the event manager and test controller
    CPPUNIT_NS::TestResult controller;

    // Add a listener that colllects test result
    CPPUNIT_NS::TestResultCollector result;
    controller.addListener(&result);

    // Add a listener that print dots as test run.
    CPPUNIT_NS::BriefTestProgressListener progress;
    controller.addListener(&progress);

    // Add the top suite to the test runner
    CPPUNIT_NS::TestRunner runner;
    runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());
    runner.run(controller);

    // Print test in a compiler compatible format.
    CPPUNIT_NS::CompilerOutputter outputter(&result, CPPUNIT_NS::stdCOut());
    outputter.write();

    return result.wasSuccessful() ? 0 : 1;
}
Nummer zwei:

Code: Alles auswählen

#include "TIModelServiceTest.h"
#include "TradeIndicatorModelService.h"


CPPUNIT_TEST_SUITE_REGISTRATION(TIModelServiceTest);

TIModelServiceTest::TIModelServiceTest() {
}

TIModelServiceTest::~TIModelServiceTest() {
}

void TIModelServiceTest::setUp() {
}

void TIModelServiceTest::tearDown() {
}

void TIModelServiceTest::testGenerateTradeIndicatorModel() {
    const size_t numberofObservations = 5;
    TradeIndicatorModel tiModel;
    TradeIndicatorModelService tradeIndicatorModelService;
    tradeIndicatorModelService.generateTradeIndicatorModel(numberofObservations, tiModel);
    gsl_vector* result = tiModel.GetLagIndicator();
    CPPUNIT_ASSERT(result->size == numberofObservations);
    
    tiModel.~TradeIndicatorModel();
    delete result;
    result = 0;
}
mit Header

Code: Alles auswählen

#ifndef TIMODELSERVICETEST_H
#define	TIMODELSERVICETEST_H

#include <cppunit/extensions/HelperMacros.h>

class TIModelServiceTest : public CPPUNIT_NS::TestFixture {
    CPPUNIT_TEST_SUITE(TIModelServiceTest);

    CPPUNIT_TEST(testGenerateTradeIndicatorModel);

    CPPUNIT_TEST_SUITE_END();

public:
    TIModelServiceTest();
    virtual ~TIModelServiceTest();
    void setUp();
    void tearDown();

private:
    void testGenerateTradeIndicatorModel();

};

#endif
und entsprechender Runner

Code: Alles auswählen

#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>

int main() {
    // Create the event manager and test controller
    CPPUNIT_NS::TestResult controller;

    // Add a listener that colllects test result
    CPPUNIT_NS::TestResultCollector result;
    controller.addListener(&result);

    // Add a listener that print dots as test run.
    CPPUNIT_NS::BriefTestProgressListener progress;
    controller.addListener(&progress);

    // Add the top suite to the test runner
    CPPUNIT_NS::TestRunner runner;
    runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());
    runner.run(controller);

    // Print test in a compiler compatible format.
    CPPUNIT_NS::CompilerOutputter outputter(&result, CPPUNIT_NS::stdCOut());
    outputter.write();

    return result.wasSuccessful() ? 0 : 1;
}
Lasse ich nun die Tests durchlaufen, dann läuft der erste der beiden nach gewohntem Standard in NetBeans ab: Alles richtig, dann erscheinen im 'Test Results' Fenster im linken Block die 100% im grünen Balken sowie die grünen Häkchen an den entsprechenden Tests.
Beim zweiten Test ist es allerdings abweichend: der Test scheint gar nicht zum Ende zu kommen. Im oberen grauen Balken steht durchweg '0.00%'. Darunter "Running tests, please wait..." Verwunderlich: Die Ausgabe im rechten Block des 'Test Results' Fensters zeigt immer an, dass der Test durchgelaufen ist und "OK" war.

Ich habe diese Tests schon viele Male laufen lassen und erhalte immer dieselben Ergebnisse.

Hat jemand, der sich mit den Tests, oder aber mit den Swing Containern von NetBeans (die ja die 'Test Results' Fenster darstellen) aus und kann hier zumindest eine Vermutung abgeben?

Simon

Size
Beiträge: 30
Registriert: 08.05.2009, 23:04

Re: CppUnit in NetBeans: Test läuft immer weiter

Beitrag von Size » 03.01.2012, 16:13

Hallo zusammen,

soviel habe ich bis jetzt raus gefunden:

Ich benötige nicht den cppunit_1.12.1 Ordner, den ich bisher immer benutzt habe. NetBeans besitzt ein XML-File org-netbeans-modules-cnd-cncppunit.xml im Ordner ./.netbeans/7.1rc2/config/Modules. Inhalt ist folgender:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//NetBeans//DTD Module Status 1.0//EN"
                        "http://www.netbeans.org/dtds/module-status-1_0.dtd">
<module name="org.netbeans.modules.cnd.cncppunit">
    <param name="autoload">false</param>
    <param name="eager">false</param>
    <param name="enabled">true</param>
    <param name="jar">modules/org-netbeans-modules-cnd-cncppunit.jar</param>
    <param name="reloadable">false</param>
</module>
Das .jar-File auf das verwiesen wird, existiert allerdings nicht im Ordner ./.netbeans/7.1rc2/modules. Ich habe es dann von der website http://www.java2s.com/Code/Jar/o/Downlo ... nitjar.htm heruntergeladen und an entsprechender Stelle abgelegt.

Es hat sich allerdings beim Testlauf nichts geändert. Die Tests laufen zwar auf der Ausgabekonsole - d.h. irgendwie scheint NetBeans auf die Funktionen zugreifen zu können die in den Headern/Libraries von CppUnit deklariert sind - aber das linke Fenster der 'Test Results" bleibt bei 0.00%, "Running tests please wait..."

Ich gehe von daher davon aus, dass der Fehler dort liegt, wo die Logik von NetBeans mit der GUI verbunden wird. Das gewohnte Anzeigeformat von Unit Tests in NetBeans wird zwar geöffnet, nicht jedoch mit den benötigten Informationen versorgt....vll. ein unterversorgter oder nicht initialisierter Listener?

Kann sich daraus jemand einen Reim machen oder noch besser: weiss er was zu tun ist?

Simon

Antworten