Ich habe kürzlich festgestellt, dass das Hinzufügen von [TestInitialize] zu einer geschützten Methode in einer .NET-Assembly nicht berücksichtigt wurde, aber wenn ich die Methode öffentlich gemacht habe, wurde sie vom Unit-Test-Runner (in diesem Fall Resharper) aufgerufen. Ich habe dies in der Vergangenheit mehrfach bei Testmethoden bemerkt.
Technisch gesehen ist es genauso einfach, über eine private Methode nachzudenken wie über eine öffentliche Methode. Reflexion ist in der Tat eine Methode, mit der private Methoden einem Komponententest unterzogen werden.
Warum muss ich also alle meine Unit-Test-Methoden veröffentlichen?
.net
unit-testing
Justin Dearing
quelle
quelle
setAccessible
dem durch einige benutzerdefinierte Security blockiert werden kannAntworten:
Sie sollten testen, was die Klasse tut und nicht, wie sie es tut.
In Bezug auf die "Außenwelt" ist dies das, was die Klasse öffentlich zugänglich macht. Ihr Test-Framework geht von der gleichen Annahme aus.
Indem Sie etwas "weniger" als Public testen, tauchen Sie in die interne Implementierung der Klasse ein, was eine schlechte Idee ist.
quelle
Im Allgemeinen ist es am besten, nur auf öffentliche Methoden zuzugreifen. Wenn Sie eine Klasse erstellen, erstellen Sie auch den Vertrag darüber, welche anderen Klassen auf Ihren Code zugreifen sollen. Die Antwort ist wahrscheinlich nur, weil es eine Konvention ist.
quelle