Report zum Ausführen von Unit-Tests

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Report zum Ausführen von Unit-Tests

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Moin,

gegeben sei eine Klasse mit n Methoden. Für jede dieser Methoden gibt es einen Unit-Test (entweder eine eigene Testklasse für jeder der n Methoden oder eine gemeinsame Testklasse mit Testmethoden für jede der n Methoden). Ich nehme gern das, was sich für mein Vorhaben besser eignet.

Jetzt möchte ich einen Report schreiben, der gezielt einen der Unit-Tests ausführt. Man stelle sich ein Selektionsbild vor, wo ich angeben kann, welchen der Unit-Tests ich ausführen möchte, den klicke ich an und sagen "Feuer" und der Unit-Test wird ausgeführt.

Wichtig ist: Es dürfen nicht alle Unit-Tests ausgeführt werden, sondern nur der ausgewählte! Ich stelle mir da irgendwas vor mit dem Funktionsbaustein SABP_AU_TEST_ITEMS_FROM_IDE, aber genau der macht ja alle Unit-Tests der Klasse.

Bitte keine Hinweise auf ATC-Cockpit oder so, ich brauche einen Report, der das macht. Aus Gründen.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Report zum Ausführen von Unit-Tests

Beitrag von msfox (Specialist / 364 / 56 / 74 ) »
Ein fertige Lösung hab ich zwar nicht, aber vielleicht eine Idee, wo du suchen kannst (hab gerade kein SAP vor mir). Wenn man einen UnitTest ausführt und dieser Fehler hat, werden doch alle Unit-Test(Methoden) aufgelistet. Dann kann man eine Methode noch einmal speziell debuggen. Vielleicht siehst du irgendwie über den Debugger, wie diese einzelne Methode gestartet wird.

Re: Report zum Ausführen von Unit-Tests

Beitrag von ewx (Top Expert / 4842 / 310 / 638 ) »
Ich frage mich natürlich nach dem Sinn dahinter...

Evtl. musst du einen eigenen Runner programmieren. Bin mir aber nicht sicher, an welcher Stelle du Zugriff auf die Testmethoden hast, bzw. die Ausführung abfragen kannst.

Report RS_AUCV_RUNNER

bzw. LSAUNIT_WB_TEST_BROWSERF04 Zeilen 459 - 488

Code: Alles auswählen.

    " one test class only
    temp_Class_Handles = au_Factory->get_Test_Class_Handles(
      obj_Type = node_Info-object-trobjtype
      obj_Name = node_Info-object-sobj_Name ).

    loop at temp_Class_Handles into test_Class_Handle.
      class_Name = test_Class_Handle->get_Class_Name( ).
      if ( class_Name ne sub_Key-class_Name ).
        continue.
      endif.

      if ( sub_Key-method_Name is initial ).
        " complete test class
        insert test_Class_Handle into table test_Class_Handles.
      else.
        " single test method
        clear method_Range.
        insert initial line into table method_Range
          assigning <range_Entry>.
        <range_Entry>-sign =    'I'.
        <range_Entry>-option =  'EQ'.
        <range_Entry>-low =     sub_Key-method_Name.

        create object method_Decorator
          exporting
            test_Instance = test_Class_Handle.
        method_Decorator->restrict_Methods(
          range = method_Range ).
        insert method_Decorator into table test_Class_Handles.
      endif.
      exit. " loop
    endloop.

Re: Report zum Ausführen von Unit-Tests

Beitrag von ewx (Top Expert / 4842 / 310 / 638 ) »
und was ist hieraus geworden, Ralf?

Re: Report zum Ausführen von Unit-Tests

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
Das kann ich dir sagen: Das ist so aufwendig, dass ich es auf unbestimmte Zeit verschieben musste. Ich hatte gehofft, dass es eine Methode gibt, mit der man sagen kann "starte mal den Unit Test X von Klasse Y".

Zum Hintergrund: Ich habe einen Testreport, der bestimmte Klassen testet (mitsamt ihrem ganzen Umfeld - das ist der Unterschied zu Unit-Tests) und am Ende ein XML anzeigt. Den Fall suche ich mir im Selektionsbild aus.

Ich würde auf den Testreport gern verzichten bzw. die ganzen Testfälle gern in Unit-Tests schreiben, weil sie dann auch thematisch da liegen wo sie hingehören. Dann würde ich dafür sorgen, dass sie beim "normalen" Start von Unit-Tests nicht mitgestartet werden, sondern nur wenn sie von extern getriggerte werden (wir brauchen ja einen Benutzer, der sich das XML anguckt).


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Report zum Ausführen von Unit-Tests

Beitrag von black_adept (Top Expert / 4080 / 125 / 934 ) »
Moin Ralf,

kannst du das nicht eventuell mit Transaktion SAUNIT_CLIENT_SETUP steuern, indem du deine aufwändigeren Testmethoden nicht als "harmless" sondern als "dangerous" deklarierst und für deine Sondertests dann das System kurz umstellst, so dass nur dann die aufwändigeren Tests durchgeführt werden?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Report zum Ausführen von Unit-Tests

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
LOL nette Idee, aber ich werde hier geschlachtet, wenn ich hier auf Systemen das Testverhalten umstelle. Die testen mit System. Außerdem sollen ja nicht alle Tests durchlaufen werden (dann kriegt der Anwender 35 XMLs angezeigt, von denen er nur eins sehen will). Und die Testmethoden ändern bedeutet jedesmal: Erzeugen eines Transportauftrages.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Report zum Ausführen von Unit-Tests

Beitrag von ewx (Top Expert / 4842 / 310 / 638 ) »
verstehe ich nicht ganz, aber danke für die Rückmeldung.
Vielleicht ist es eine Alternative, zwar alle unit tests auszuführen, aber nur den relevanten anzuzeigen?

in task_result_casted->f_task_data stehen alle getesteten Klassen mit deren Methoden...

Code: Alles auswählen.


CLASS passport DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
    CLASS-METHODS
      get
        RETURNING VALUE(result) TYPE REF TO passport.
ENDCLASS.

CLASS passport IMPLEMENTATION.
  METHOD get.
    CREATE OBJECT result.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

  DATA aunit_result         TYPE REF TO if_saunit_internal_result.
  DATA cvrg_rslt_provider   TYPE REF TO if_aucv_cvrg_rslt_provider.
  DATA runner               TYPE REF TO cl_aucv_test_runner_abstract.

  runner = zcl_aucv_test_runner_acp=>create( passport=>get( ) ).

  runner->run_for_program_keys(
    EXPORTING
      i_limit_on_risk_level        = 0
      i_limit_on_duration_category = 0
      i_program_keys               = VALUE #( ( obj_name = 'ZCL_CLASSNAME' obj_type = 'CLAS' ) )
      i_packages_to_measure        = VALUE #( ( `$TMP` ) )
    IMPORTING
      e_aunit_result =    aunit_result
      e_coverage_result = cvrg_rslt_provider ). " can be initial

  DATA task_data               TYPE if_saunit_internal_rt_v3=>ty_s_task.
  DATA task_result_casted TYPE REF TO cl_saunit_internal_result.
  task_result_casted ?= aunit_result.
  CALL FUNCTION '_SAUNIT_DSPL_RSLT_AS_DYNP_V3'
    EXPORTING
      task_data               = task_result_casted->f_task_data
      on_success_only_message = abap_true.

zcl_aucv_test_runner ist eine Ableitung von CL_AUCV_TEST_RUNNER_ABSTRACT wo ich den assert auf den Klassennamen entfernt habe.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1904
Views
ABAP Unit Tests
von jocoder » 21.07.2017 15:25 • Verfasst in ABAP Objects®
4
Antw.
457
Views
EHP 8 -- Unit-Tests in Funktionsgruppen
von ralf.wenzel » 16.08.2022 10:03 • Verfasst in ABAP® Core
9
Antw.
2103
Views
Sinn von Unit-Tests
von SaskuAc » 03.04.2019 13:33 • Verfasst in ABAP® für Anfänger
9
Antw.
1445
Views
Inaktives Report ausführen?
von generic_user » 21.03.2020 20:38 • Verfasst in ABAP® für Anfänger
5
Antw.
5591
Views
Ausführen-Button im Report.
von rsb » 28.04.2006 15:04 • Verfasst in ABAP® Core

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.