Guten Morgen,
ich habe mich nun etwas in NUnit eingearbeitet und stehe vor einem kleinen Problem. Meine Tests funktionieren soweit in einem Testprojekt, jedoch ist mein Problem, dass ich meine Zugriffsberechtigungen für mein aktuelles Projekt über den Haufen werfen müsste. Ich kann ja z. B. "internal" Methoden nicht aus dem Testrpojekt aufrufen.
Alternative hierfür wäre, ich schreibe für jedes Teilprojekt meiner Solution eine extra "UnitTestWrapper"-Klasse, in welcher ich die Testlogik verberge und diese Methoden rufe ich dann aus der NUnit-Klasse ([TestFixture]) auf.
Oder übersehe ich hier etwas.
Mit freundlichen Grüßen,
bernett
Hi,
also ich hab dafür immer das InternalsVisibleTo-Attribute in der zu testenden Assembly entsprechend gesetzt.
Das heisst, dass du hier definierst, welche anderen Assemblies Zugriff auf die internal-Klassen bzw. Methoden haben.
z.b. schreibst du in deine zu testende Assembly: (z.b. in das AssemblyInfo File)
[assembly:InternalsVisibleTo("NameDeinerUnitTestAssembly")]
Hallo,
danke für den Hinweis. Ich habe das auch ausprobiert, jedoch sagt mir VS immer, dass der Attributpfad "assembly" nicht gültig ist und ich nur type verwenden kann. Für type existiert jedoch kein "InternalsVisibleTo". Liegt das Problem eventuell an den .Net versionen? Ich benutze momentan 3.5 zusammen mit VS2008.
Mit freundlichen Grüßen,
bernett
Das ist jetzt aber wieder so eine Philisophie Frage.
Unittests sollen eigentlich die Programmierschnittstelle testen, und sicherstellen, das
diese auch nach Refaktorierungen oder Ergänzungen einwandfrei funktionieren.
Ausserdem sollte man ja sowieso gegen Interfaces programmieren/Testen,
und deshalb stellt sich ja diese Frage/Aufgabe eigentlich licht.
Aber es entstehen da jedesmal Glaubenskriege zu diesem Thema.
Das hatte ich mir auch schon überlegt. Jedoch würde es dann bei mir so aussehen, dass ich z. B. bei meiner Schnittstelle von der View zum Controller ansetze und dann alles was danach kommt auch ausgeführt wird. Ich müsste also dann für jeden einzelnen Testcase auch wieder Daten (über Webservices) in die Datenbank des 2. Programmes schreiben (Durchlauf des kompletten Models). Das finde ich für Unittests jetzt auch nicht so schön. Ich werde zwar auch hierfür Testfälle schreiben, jedoch ist das ja nicht beim Überprüfen von Properties jedes mal notwendig in meinen Augen.
Ich habe es jetzt wie beschrieben über eine "UnitTestWrapper.cs" Klasse gelöst, die eben jedes Projekt besitzt. Diese enthält meine Testlogik und wird von einer für jedes Projekt separaten NUnit-Datei aufgerufen. Ich finde die Lösung garnicht so schlecht, da ich dann auch Unittests schön über Code vorher durchlaufen und debuggen kann.
Danke,
bernett
Für bessere Tests mit Datenbanken benutze ich NDBUnit.
Ist in Zusammenarbeit mit ner kleinen zusatzLib ( aus dem Summer of NHibernate )
einfach zu realisieren.
http://www.summerofnhibernate.com/
Da kannst Du das Setup in dem 4. Video ( also in Session 3 ) sehen.