Unit testet privaten Code [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Unit Testen von privaten Methoden in C # 9 answers

Ich bin derzeit an der Entwicklung mit C # beteiligt. Hier einige Hintergrundinformationen: Wir implementieren MVP mit unserer Clientanwendung und haben eine zyklomatische Regel, die besagt, dass keine Methode eine zyklomatische Komplexität von mehr als 5 aufweisen sollte. Dies führt zu vielen kleinen privaten Elementen Methoden, die in der Regel für eine Sache verantwortlich sind.

Meine Frage bezieht sich auf Unit-Tests einer Klasse:

Die private Implementierung mit den öffentlichen Methoden zu testen ist in Ordnung ... Ich habe kein Problem damit, dies zu implementieren.

Aber ... was ist mit den folgenden Fällen:

Beispiel 1 Verarbeiten des Ergebnisses einer asynchronen Datenabrufanforderung (Die Rückrufmethode sollte nicht nur zu Testzwecken öffentlich sein)

Beispiel 2. Ein Ereignishandler, der eine Operation ausführt (z. B. den Text eines View-Labels aktualisieren - dummes Beispiel, das ich kenne ...)

Beispiel 3. Sie verwenden ein Framework eines Drittanbieters, mit dessen Hilfe Sie geschützte virtuelle Methoden überschreiben können (der Pfad von den öffentlichen Methoden zu diesen virtuellen Methoden wird im Allgemeinen als Black-Box-Programmierung behandelt und weist alle möglichen Abhängigkeiten auf, die das Framework Ihnen zur Verfügung stellt möchte nicht wissen über)

Die obigen Beispiele scheinen mir nicht das Ergebnis eines schlechten Designs zu sein. Sie scheinen auch keine Kandidaten für den Wechsel in eine separate Klasse zu sein, um isoliert zu testen, da solche Methoden ihren Kontext verliere

Hat jemand irgendwelche Gedanken dazu?

Cheers, Jason

BEARBEITEN Ich glaube nicht, dass ich in meiner ursprünglichen Frage klar genug war - ich kann private Methoden mit Accessoren testen und Aufrufe / Methoden mit TypeMock verspotten. Das ist nicht das Problem. Das Problem besteht darin, Dinge zu testen, die nicht öffentlich sein müssen oder nicht öffentlich sein können.

Ich möchte den Code nicht für Testzwecke veröffentlichen, da er Sicherheitslücken aufweisen kann (nur das Veröffentlichen einer Schnittstelle, um dies zu verbergen, ist keine Option, da jeder das Objekt einfach auf seinen ursprünglichen Typ zurücksetzen und Zugriff auf Inhalte erhalten kann Ich würde nicht wollen, dass sie)

Code, der zum Testen in eine andere Klasse umgestaltet wird, ist in Ordnung - kann jedoch den Kontext verlieren. Ich habe es immer für eine schlechte Praxis gehalten, Helferklassen zu haben, die eine Menge Code ohne spezifischen Kontext enthalten können - (siehe SRP hier). Ich glaube nicht, dass dies für Event-Handler funktioniert.

Ich bin froh, dass ich mich geirrt habe - ich bin nur unsicher, wie ich diese Funktionalität testen soll! Ich war schon immer der Meinung, dass, wenn es kaputt gehen oder geändert werden kann, es getestet werden muss.

Cheers, Jason