Mein Entwicklungsteam hat begonnen, Mockito zu verwenden und Klassen zu verwenden, die als 'final' definiert wurden. Ich habe in Effektivem Java von Joshua Bloch und im SO-Thread When to use final gelesen, dass alle Klassen den letzten Modifikator verwenden sollten. Es gab Meinungsverschiedenheiten im Thread, aber ich stimme der Idee zu, die Klassenzusammensetzung zu erzwingen, wenn die Vererbung keinen Sinn ergibt.Was ist zu tun, wenn Java Best Practices mit Mockito kollidieren?
Was soll ich tun, wenn ich Klassen mit einem Testframework wie Mockito testen möchte, das erfordert, dass Klassen nicht den 'finalen' Modifikator haben? Ich hoffe, dass jemand anderes während seiner Entwicklung auf ähnliche Probleme gestoßen ist. Zu welchen Vorsätzen kam Ihr Entwicklungsteam?
Es gibt zwei offensichtliche Antworten wie die Verwendung von JMock oder den 'finalen' Modifikator für die Klassen, die wir testen möchten, aber wir wollen mit einem externen Testframework (neben JUnit) bleiben und es kann schwierig sein, andere zu überzeugen Entwickler, um den 'finalen' Modifikator zu entfernen.
Danke.
Es ist sicherlich keine bewährte Methode, alle * Klassen * 'final' zu erstellen. Es ist schon eine Weile her, seit ich Effektives Java gelesen habe, aber der Konsens des verknüpften Threads scheint dies auch nicht zu implizieren. Sie sollten die Klassen "final" markieren, um zu signalisieren, dass sie aus irgendeinem Grund nicht erweitert werden sollten - wenn es keinen Grund gibt, fügt sie einfach unnötige Komplexität hinzu - wie Sie gefunden haben. Wenn Sie bemerken, dass Sie die Klasse irgendwo weiter ausbauen müssen, müssen Sie den Code der ursprünglichen Klasse ändern, um die neue Klasse zu schreiben - was gegen das Open/Closed-Prinzip verstößt. – Nate