Die Frage bezieht sich speziell auf "White-Box-Tests". Hier kennen Ihre Tests die interne Struktur Ihres Codes genau und bestätigen das Verhalten bei jedem Schritt und nicht nur die Eingabe / Ausgabe / Nebenwirkung (Black-Box-Test). Während JUnit für beides hervorragend geeignet ist, benötigen Sie weitere zusätzliche Frameworks, um dies im Rahmen eines Unit-Tests zu tun.
EasyMock und JMock sind hierfür gute Frameworks. Ich neige dazu, JMock zu bevorzugen.
Bei dem Risiko, eine OT-Debatte zu beginnen, sollten Sie sorgfältig über die Auswirkungen von White-Box-Tests nachdenken. White-Box-Tests sind (offensichtlich) eng mit Ihrem Code verbunden. Wenn sie nicht sorgfältig verwendet werden, können spöttische Frameworks dazu führen, dass Ihre Tests ziemlich kompliziert, schwer lesbar und beim Refactoring spröder sind.
Ich neige dazu, mich an eine Mischung aus beidem zu halten. Black-Box-Tests, wo immer möglich, und White-Box-Tests werden sparsam auf riskanteren / komplizierteren Code angewendet.
Natürlich können die oben aufgeführten Frameworks auch in Black-Box-Tests verwendet werden, bei denen die Anzahl der beitragenden (injizierten) Klassen groß ist und einfaches Stubbing unhandlich wird.
In Bezug auf TDD handelt es sich in erster Linie um einen designverbessernden Ansatz zum Schreiben von Code und nicht nur um das Schreiben von Tests. Die Tests, die Sie am Ende haben, sind eine wichtige Ausgabe, aber darüber hinaus soll der Ansatz das Design und die Struktur Ihrer Anwendung verbessern.