Ich denke, eine grundlegendere Frage sollte gestellt werden: Warum versuchen Sie überhaupt, die private Methode zu testen? Dies ist ein Codegeruch, bei dem Sie versuchen, die private Methode über die öffentliche Schnittstelle dieser Klasse zu testen, während diese Methode aus einem bestimmten Grund privat ist, da es sich um ein Implementierungsdetail handelt. Man sollte sich nur mit dem Verhalten der öffentlichen Schnittstelle befassen, nicht mit der Art und Weise, wie sie unter dem Deckmantel implementiert wird.
Wenn ich das Verhalten der privaten Methode mithilfe allgemeiner Refactorings testen möchte, kann ich ihren Code in eine andere Klasse extrahieren (möglicherweise mit Sichtbarkeit auf Paketebene, um sicherzustellen, dass er nicht Teil einer öffentlichen API ist). Ich kann dann sein Verhalten isoliert testen.
Das Produkt des Refactorings bedeutet, dass die private Methode jetzt eine separate Klasse ist, die zu einem Kollaborateur der ursprünglichen Klasse geworden ist. Sein Verhalten wird durch eigene Unit-Tests gut verstanden worden sein.
Ich kann mich dann über sein Verhalten lustig machen, wenn ich versuche, die ursprüngliche Klasse zu testen, damit ich mich darauf konzentrieren kann, das Verhalten der öffentlichen Schnittstelle dieser Klasse zu testen, anstatt eine kombinatorische Explosion der öffentlichen Schnittstelle und das Verhalten aller ihrer privaten Methoden testen zu müssen .
Ich sehe das analog zum Autofahren. Wenn ich ein Auto fahre, fahre ich nicht mit geöffneter Motorhaube, damit ich sehen kann, dass der Motor funktioniert. Ich verlasse mich auf die Schnittstelle, die das Auto bietet, nämlich den Drehzahlmesser und den Tacho, um zu wissen, dass der Motor funktioniert. Ich verlasse mich darauf, dass sich das Auto tatsächlich bewegt, wenn ich das Gaspedal drücke. Wenn ich den Motor testen möchte, kann ich das isoliert überprüfen. : D.
Natürlich kann das direkte Testen privater Methoden ein letzter Ausweg sein, wenn Sie eine Legacy-Anwendung haben, aber ich würde es vorziehen, wenn Legacy-Code überarbeitet wird, um bessere Tests zu ermöglichen. Michael Feathers hat zu diesem Thema ein großartiges Buch geschrieben. http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052
pre-historic
in Bezug auf Internetjahre ... ist , aber das Testen von privaten Methoden in Einheiten ist jetzt sowohl einfach als auch unkompliziert, da Visual Studio bei Bedarf und bei Bedarf die erforderlichen Accessor-Klassen erstellt Vorfüllen der Testlogik mit Ausschnitten, die fast dem entsprechen, was man sich für einfache Funktionstests wünscht. Siehe z. msdn.microsoft.com/en-us/library/ms184807%28VS.90%29.aspx