# Wie teste ich einen privaten Konstruktor? ;-)



## Novanic (17. Okt 2006)

Hi Leute,

ich nutze JetBrains IntelliJ IDEA 6.0 als IDE. IntelliJ 6 kommt jetzt mit Untersütztung für EMMA (ein OpenSource-Code-Coverage-Tool), dass ihr hier findet könnt: emma.sourceforge.net/

Merkwürdiger weise zeigt mir IntelliJ jetzt an, dass ich meinen Konstruktor testen soll, obwohl er private ist (Konstruktor einer Util-Klasse, die mit "public final class" deklariert ist).

Ein private-Konstrukor lässt sich doch nicht testen oder? 
Hatte jemand schonmal diesen Fehler oder kann mir jemand sagen ob es eher an IntelliJ oder an EMMA liegen muss?

Danke schonmal! 

Gruß Nova


----------



## byte (18. Okt 2006)

Wohl nur indirekt durch ne statische Erzeugermethode (siehe Singleton Pattern)...


----------



## Novanic (18. Okt 2006)

Ja, stimmt, wenn der Konstruktor innerhalb der Klasse verwendet wird, wird er automatisch getestet, wenn ich die entsprechende Methode teste.
Aber da der private Konstruktor nirgends aufgerufen wird, kann ich ihn auch nicht testen... 

Ich denke mal es liegt dann an EMMA. Wenn ich keinen Konstruktor implementiere, wird der Klassen-Kopf als ungetestet markiert, weil ich den Default-Konstruktor nicht getestet habe und wenn ich einen privaten Konstruktor implementiere, wird dieser als ungetestet gewertet.
Andere Möglichkeiten gibt es aber nicht oder?

Dann werde ich das wohl mal an EMMA melden müssen...
Also ein privater Konstruktor, der in der Klasse nicht verwendet wird und auch keinen Inhalt hat, sollte von der Testauswertung ausgeschlossen werden oder nicht?

Danke für eure Hilfe! 

Gruß Nova


----------



## byte (18. Okt 2006)

Ein privater Konstruktor, der nie aufgerufen wird, kann gänzlich entfernt werden. :roll:


----------



## Novanic (18. Okt 2006)

Äh, ne? Wenn ich verhindern möchte, dass eine Instanz von der Klasse erzeugt wird? Es handelt sich ja um eine reine Util-Klasse (also alles final und static).

Und wenn ich den Konstruktor weglasse, sagt mir EMMA wiederrum, dass ich den Default-Konstruktor testen soll...


----------



## SnooP (18. Okt 2006)

Jo... solche Konstruktoren sollten grundsätzlich nicht im Abdeckungsfall auftauchen - toll wäre, wenn man für dieses EMMA Annotations nutzen könnte, sowas wie @DontTestMe oder so... damit man von vornherein explizit bestimmte Abdeckungsfälle ausschließen kann.


----------



## SlaterB (18. Okt 2006)

wenn die Klasse eh nix schlimmes anstellen kann, dann erlaube doch einfach den Default-Konstruktor,
niemand kann new Object() verhindern, wer dann new Util() macht ist ebenso selber schuld 

und diesen Defalut-Konstruktor wirst du doch nun wohl testen können um die gute EMMA zufrieden zustellen 
(ist das eine Frauenzeitschrift?  )


----------

