Wie kann ich Assembly (Unit Testing) auf interne Eigenschaften einer anderen Assembly zugreifen lassen?
Ich würde gerne meinem Core assembly nicht aussetzen einer bestimmten Klasse und ich würde immer noch gerne in der Lage sein, um es zu testen. Wie kann ich das tun ?
InformationsquelleAutor der Frage Tomas Pajonk | 2008-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
InternalsVisibleTo Attribut zur Rettung!
Nur hinzufügen:
Ihren Kern-Klassen AssemblyInfo.cs-Datei
Sehen Friend-Assemblys (C# - Programmierhandbuch) für best practices.
InformationsquelleAutor der Antwort aku
Mit InternalsVisible wenn Ihr Assemblys mit starkem Namen müssen Sie den öffentlichen Schlüssel (Hinweis: der vollständige Schlüssel nicht das token des öffentlichen Schlüssels) zum Beispiel...
und der folgende trick ist sehr hilfreich, wenn man sich den öffentlichen Schlüssel, ohne Rückgriff auf die cmd-line...
http://www.andrewconnell.com/blog/archive/2006/09/15/4587.aspx
InformationsquelleAutor der Antwort Simon Keep
Legte ich meine unit-tests in der gleichen assembly wie der code, der es testen. Das macht Sinn für mich, weil ich denke, dass der "test dich selbst" als ein Merkmal einer Klasse, zusammen mit Dingen wie "initialisieren " selbst" und "sich selbst beschreiben".
Ich habe gehört, einige Einwände gegen diesen Ansatz, aber nur wenige von Ihnen wurden überzeugt.
Es tut weh, Leistung Bah, ich sagen! Nicht optimieren, ohne "harte" Daten! Vielleicht, wenn Sie planen, Ihren Baugruppen heruntergeladen werden, die über langsame links, dann Minimierung der Montage-Größe wäre sinnvoll.
Es ist ein Sicherheitsrisiko. Nur wenn Sie Geheimnisse haben in Ihren tests. Tun Sie das nicht.
Nun, deine situation ist anders als meine, so dass es vielleicht Sinn machen werde, für Sie, und vielleicht wird es nicht. Sie müssen, um das herauszufinden selbst.
Beiseite: In C#, ich habe mal versucht, dass meine unit-tests in einer Klasse namens "Test", dass war verschachtelte innerhalb der Klasse, es war Prüfung. Diese aus der richtigen Organisation der Dinge, die offensichtlich sind. Es auch vermieden die Vervielfältigung von Namen, die Auftritt, wenn tests für Klasse "Foo" sind in einer Klasse namens "FooTests". Jedoch, die unit-Test-frameworks, die ich hatte Zugang zu weigerte sich zu akzeptieren, tests, die nicht als "öffentlich" gekennzeichnet. Dies bedeutet, dass die Klasse, die Sie testen sind nicht "privat". Ich kann mir nicht vorstellen, dass es eine guten Grund, zu verlangen, tests zu "öffentlichen", da wirklich niemand nennt Sie als öffentliche Methoden - alles ist durch Reflexion. Wenn Sie jemals schreiben einen unit-Test-framework für .Net, bitte beachten Sie, dass nicht-öffentliche tests, um meinetwillen!
InformationsquelleAutor der Antwort Jay Bazuzi
Können Sie mithilfe von reflektion (als MS-Test-Elemente haben), oder Sie können erklären, die unit-test-assembly ein Freund der core-assembly.
Die andere option ist, um die unit-tests in der gleichen assembly.
InformationsquelleAutor der Antwort Dan Blair
Ich würde vorschlagen, nicht solche Probleme ... wenn Sie wirklich wollen, um unit-testen Sie Ihre "internen" Klassen, nur verstecken Sie Weg in einem namespace, der nur in Ihrem internen code würde am Ende mit. Es sei denn, Sie schreiben einen Rahmen auf die Waage .NET framework, die Sie nicht wirklich müssen, die Ebene zu verstecken.
InformationsquelleAutor der Antwort Joel Martinez