2016-05-17 4 views
0

Gibt es eine Möglichkeit, eine Service-Methode (eine Methode, die in der Service-Schicht (Interface) implementiert ist) nur in Test-Klassen zu verwenden?Java-Service-Methode nur für Test

in meinem Service-Schnittstelle habe ich eine Methode, die ich will, es benutzen nur in Testklasse und verhindern oder eine Warnung an andere Entwickler zeigen, dass es nicht verwenden in ihren managerImpl oder anderen Palast wie Controller

+0

Ich schreibe Test-Klasse für unsere Business-Services-Methoden, in meinem Testfall muss ich alle Benutzer entfernen (nur für Test) und ich möchte diese Methode nicht auf die Service-Ebene setzen, also was soll ich tun? – Moolerian

+0

Kann ich @Deprecated oder etwas Ähnliches verwenden? ich möchte eine Möglichkeit, andere Entwickler zu warnen "nicht im Produktionsmodus verwenden" – Moolerian

Antwort

2

Lets über Wortlaut genau sein:

Wenn Sie reden wirklich über ein Verfahren zur Herstellung einer Java-Schnittstelle ; Mit Java8 können Sie dann eine Standardimplementierung bereitstellen, die beispielsweise eine Ausnahme auslösen könnte. und dann haben Sie sehr spezifische Klassen, die diese Schnittstelle implementieren und diese eine Methode möglicherweise für Testzwecke überschreiben.

Wenn Sie über "Schnittstellen" im Allgemeinen sprechen; wie "die Liste der Methoden einer Klasse" ... dann könnte diese Art von "Base Throws" und "Children Override" auch funktionieren.

Natürlich könnte die erste Antwort die Sichtbarkeit selbst sein. Wenn wir nicht sprechen über eine echte Schnittstelle sind; Sie könnten das Methodenpaket zumindest schützen. dann ist die Nutzung auf dasselbe Paket beschränkt.

Eine andere Möglichkeit wäre, ISP und segregate Ihre Schnittstellen zu folgen. Wenn es etwas gibt, das nur zum "Testen" verwendet werden sollte; dann überlege, diese Dinge in ein "TestSupportInterface" zu stellen; oder etwas Ähnliches.

Aber nochmal; die meisten dieser Ideen funktionieren "per Konvention"; durch Bereitstellung einer Art von Informationen, die der Benutzer verdauen muss ... aber das kann nicht erzwungen werden.

Endlich: Sie könnten Ihren Produktionscode ändern. Sehr oft brauchen Sie solche "speziellen Testgetter" nicht. Mit anderen Worten: Wenn Ihre Tests wie "Zustand von X abrufen" funktionieren, machen Sie etwas mit X. holen Sie den Zustand von X erneut und vergleichen Sie ". Manchmal kann dies in Verhalten basierte Tests geändert werden (Sie überprüfen nicht, was passiert mit X; aber Sie überprüfen, was X zu Y, Z, ... tut).

0

Nein, in Java gibt es kein Konzept, um Entwickler vor der Verwendung von Methoden zu warnen.

Überdenken Sie, ob Sie wirklich eine solche Methode brauchen, oder ob Sie Ihr Design ändern könnten, um eine solche Hintertür nicht zu benötigen. (z. B. die Stärke der Abhängigkeitsinjektion verwenden). Aus meiner Erfahrung ist das immer möglich.

Wenn Sie immer noch davon überzeugt sind, dass diese Methode in Ihrem Testcode implementiert werden soll (z. B. durch Unterklassen), nicht im Produktionscode.

+0

Ich schreibe Test-Klasse für unsere Business-Services-Methoden, in meinem Testfall muss ich alle Benutzer entfernen (nur für Test) und Ich möchte diese Methode nicht auf die Serviceebene stellen, also was soll ich tun? – Moolerian

0

Es ist generell besser, nichts in Ihren Produktionscode "nur für Tests" zu schreiben.

Sie könnten einen Service erstellen, der auf die Unterdrückung aller Benutzer ausgerichtet ist, und ihn in Ihren Testklassenpfad einfügen. Je nach Ihrer Implementierung könnte dieser Service eine Unterklasse Ihres Produktionsbenutzerdienstes sein.

0

Zusätzlich zu den anderen guten Antworten: Wenn Sie wirklich eine Methode benötigen, die von einem Testfall, aber nicht vom Produktionscode aufgerufen wird, können Sie diese Methode private machen. Wenn also niemand die Sichtbarkeit ändert, wird niemand diese Methode verwenden. Und in Ihrem Testfall können Sie es unter PrivateAccessor anrufen.

Aber Vorsicht: Dies wird meist als Code-Geruch betrachtet. Für Ihre IDE ist dies eine private und nicht verwendete Methode, daher wird eine Warnmeldung angezeigt. Und jemand anderes könnte diese Methode deswegen entfernen.