AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unit-Test für private/protected Member?

Ein Thema von mh166 · begonnen am 9. Sep 2014 · letzter Beitrag vom 10. Sep 2014
Antwort Antwort
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#1

AW: Unit-Test für private/protected Member?

  Alt 9. Sep 2014, 13:14
Es stimmt dass bei steigender Komplexität auch das Testen schwieriger wird. Dabei wird das Testen in diesen Fällen umso wichtiger, genauso wie sauberer, übersichtlicher, wartbarer - und eben testbarer - Code.

Auch das Aufteilen der Klasse bringt da nichts mehr. Es geht nicht um den Umfang der Klasse, sondern wie kompliziert die Logik ist, die umgesetzt wird.
Man kann aber auch Logik aufteilen. Meistens durch Generalisieren einer Teillogik, und separaten Implementierung (&testen) dieser. Dann kann man diese auch separat testen. Tests für die ursprüngliche Klasse können dann eine Mock-Implementierung der Teillogik verwenden, was wiederum ein einfaches gezieltes Testen ermöglicht.

Weiterhin gibt es Unstetigkeiten, die man mit einfachen setzen von Eingangsvariablen, nicht mehr treffen kann. (also mit vertretbaren Aufwand)
Vllt. nicht mit direktem setzen von Eingangsvariablen, aber man kann auf getestete Methoden zurückgreifen:

Code:
testInstance = TestClass.create('testValue');
testInstance.doSomething('withTestValue');

testInstance.testTargetMethod('anothertestvalue');
entsprechend muss transferToState getestet sein, aber dann sollte das Problem auch lösbar sein.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Jens01
Online

Registriert seit: 14. Apr 2009
674 Beiträge
 
#2

AW: Unit-Test für private/protected Member?

  Alt 9. Sep 2014, 13:36
Vllt. nicht mit direktem setzen von Eingangsvariablen, aber man kann auf getestete Methoden zurückgreifen:
Code:
testInstance = TestClass.create('testValue');
testInstance.doSomething('withTestValue');
testInstance.testTargetMethod('anothertestvalue');
entsprechend muss transferToState getestet sein, aber dann sollte das Problem auch lösbar sein.
Sorry, kann ich gerade nicht nachvollziehen, was Du meinst.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Unit-Test für private/protected Member?

  Alt 9. Sep 2014, 14:02
Unter dem Aspekt, dass Klassen in der selben Unit gegenseitig auf private und protected Felder zugreifen können, hatte ich es mal folgendermaßen realisiert:
  1. "Unit Test"-Unit anlegen mit ner Basisklasse TUnitTest und einer RegisterUnitTest Funktion
    • Die Basisklasse bekommt eine abstrakte virtuelle Methode Test
  2. In jeder Unit in der man eine oder mehrere Klassen testen willst, bindet man (unter Verwendung von IFDEF xxx) die "Unit Test"-Unit ein und deklariert sich eine Testklasse, die von TUnitTest ableitet.
    • Jetzt kann man die virtuelle Test Methode überschreiben und fleißig testen.
  3. Im initialization Teil der Unit ruft man zum Schluss noch schnell RegisterUnitTest für jede vorhandene Testklasse auf.

In der Hauptunit implementiert man sich die RegisterUnitTest Funktion im Optimalfall so, dass alle Testobjekte in einer Liste abgelegt werden, die man dann beim großen Test einfach sequentiell durcharbeitet.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Unit-Test für private/protected Member?

  Alt 9. Sep 2014, 13:55
Es stimmt dass bei steigender Komplexität auch das Testen schwieriger wird.
Eigentlich nicht. Es bleiben -im Idealfall- kleine leicht testbare Klassen. Nur eben viel mehr. Aber das Testen selbst wird nicht komplexer, es dauert nur länger. Wir *machen* nur den Fehler, und lassen große Projekte immer komplexer werden, weil wir hier noch was ranbepseln, dort eine Funktion anflanschen usw.

Wichtig ist, das man Sperenzchen wie Threads und solchen Schnickschnack soweit wie möglich vermeidet, denn so ein Zeugs ist verdammt schwer zu testen. Wenn man Threads benutzen muss, dann am besten mit einem fertigen Framework, wie einer Jobqueue, Workerthreads oder ähnlichem. Überhaupt sollte alles, was die heile testbare Welt verlassen kann (eine 'Unit'), gekapselt werden, also nicht wie wild SQL-Befehler absetzen, wo es gerade passt oder eine Verbindung zu einer anderen Dimension herstellen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz