Frage

hat Mein Entwicklungsteam beginnt zu verwenden Mockito und haben Klassen, die als ‚final‘ definiert wurden. Ich habe in Effective Java von Joshua Bloch und in dem SO-Thread lesen Wenn final zu verwenden, die alle Klassen sollten die endgültige Modifikator. Es gibt einige Meinungsverschiedenheiten in dem Thread, aber ich stimme mit der Idee zu zwingen Klassenzusammensetzung, es sei denn Vererbung Sinn macht.

Was soll ich tun, wenn ich zu Testklassen möchten, mit einem Test-Framework wie Mockito die Klassen nicht über die ‚endgültige‘ Modifikator erfordert? Ich bin der Hoffnung, jemand anderes hat ähnliche Probleme aufgetreten während ihrer Entwicklung. Welche Auflösungen haben Ihre Teamentwicklung kommen auf?

Es gibt zwei offensichtliche Antworten wie die Verwendung von JMock oder entfernen Sie die ‚endgültige‘ Modifikator auf die Klassen, die wir testen wollen, aber wir wollen mit einem externen Test-Framework bleiben (außer JUnit), und es kann schwierig sein, andere Entwickler davon zu überzeugen, die ‚endgültige‘ Modifikator zu entfernen.

Danke.

War es hilfreich?

Lösung

Was brauchen Sie am meisten:

  1. Die Fähigkeit, um sicherzustellen, dass jemand nicht von Ihrer Klasse erbt, OR
  2. Die Fähigkeit, stellen Sie sicher, dass Ihr Code testbar ist Ihr Mockframework der Wahl mit?

Generell glaube ich, dass Sie nicht erzwingen müssen (1). Für mich Testbarkeit (2), ist viel wichtiger. Was passt Ihre Situation am besten?

Andere Tipps

Wenn Sie Ihre Klassen wollen endgültig sein können Sie diese Schnittstellen implementieren. Die Schnittstellen sind mockable.

Wie bereits in der anderen Antwort erwähnt können Sie Ihre endgültigen Klassen machen zu implementieren Schnittstelle (n) und in Ihren Tests verspotten die Schnittstelle (n).

Dies ist eines der Vorteil der Verwendung von Mock-Objekte; in Szenarien wie diese sie machen Sie den Code, darüber nachzudenken, wie man besser organisiert werden kann. Wenn Ihre Code-Basis vielen Bezug auf Abschlussklassen hat (also bis zur konkreten Umsetzung Bindung) es verstößt gegen das OO Prinzip der „Programmierung mit einer Schnittstelle“ und die Notwendigkeit eines besseren Überprüfbarkeit Sie Refactoring zu denken, würde dazu beitragen, die Abhängigkeit von konkreten Implementierungen zu beseitigen.

Dieses Papier auf Verwendung von Mock-Objekte Endo-Prüfung: Unit Testing mit Mock-Objekte hat ein Abschnitt (4.4) mit dem Titel Entdeckung Schnittstelle , die wie Mock-Objekte Hilfe bei der Entdeckung der Schnittstellen.

erklärt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top