| 

.NET C# Java Javascript Exception

6
Eins vorweg: Ich bin Admin. Ich teste hier gerade ein paar selbstgeschrieben Funktionen mit NUnit. Es wird das Tool regsvr32 gestartet um ein paar DLLs, EXEn und OCXe zu registrieren. Danach wird getestet, ob in der Registry die Einträge vorhanden sind oder nicht.

Nur zeigt mir NUnit immer einen Fehler an. Ich geb euch mal n Beispielcode:
const string file = "[Pfad zur OCX]";
ProcessStartInfo unregDLL = new ProcessStartInfo();
unregDLL.FileName = "regsvr32";
unregDLL.Arguments = string.Format("/u /s \"{0}\"", file);
Process.Start(unregDLL).WaitForExit();


Soweit so gut. Der Teil des Testens funktioniert. Nun zum registrieren einer DLL:
ProcessStartInfo regDLL = new ProcessStartInfo();
regDLL.FileName = "regsvr32";
regDLL.Arguments = string.Format("/s \"{0}\"", file);
Process.Start(regDLL).WaitForExit();


Und die Tests dazu:

testKey1 = Registry.ClassesRoot.OpenSubKey("\CLSID\{[...]}");
testKey2 = Registry.ClassesRoot.OpenSubKey("\CLSID\{[...]}\InprocServer32");
testKey3 = Registry.ClassesRoot.OpenSubKey("\CLSID\{[...]}\ProgID");
testKey4 = Registry.ClassesRoot.OpenSubKey("\CLSID\{[...]}\TypeLib");

Assert.AreNotEqual(null, testKey1);
Assert.AreNotEqual(null, testKey2);
Assert.AreNotEqual(null, testKey3);
Assert.AreNotEqual(null, testKey4);


Jetzt zeigt er mir immer wieder an, dass da ein null herauskommt. Dem sollte aber nicht so sein, denn wenn ich den Test aufgerufen hab (und als letzter Befehl eben das Registrieren der OCX gestartet ist), dann müsste ein Eintrag auch in der Registry vorhanden sein. Ein kurzes Nachschauen bestätigt die Tatsache.

Und von solchen Tests (und Funktionen) hab ich mehrere, die nach dem gleichen Schema aufgebaut sind: Deregistrieren und testen, ob die Einträge nicht vorhanden sind (das klappt auch), Registrieren und testen, ob die Einträge vorhanden sind (klappt nicht) und mit meiner selbstgeschriebenen Funktion diese Einträge wieder löschen.

Wo ist mein Problem?
25.10.2011
starki 603 1 8
Möglicherweise funktionieren deine Tests beim Deregistrieren ja auch nicht (falls du das genauso überprüfst wie oben), denn null als Rückgabewert kann ja auch heissen, dass der Key einfach nicht geöffnet werden konnte, weshalb auch immer...
Eiger 25.10.2011
1 Antwort
1
Ohne mir groß den Code anzuschauen: Testest du das zufällig auf Win7 / Vista / Win2k8 64 Bit?

RegSvr32 registriert für 32 Bit. Falls du ein 64 Bit System hast und deine NUnit Tests für 64 Bit kompilierst, könnte ich mir vorstellen das deine Tests an der falschen Stelle nachschauen. Versuche mal deine Tests für 32 Bit / X86 zu kompilieren statt any CPU

Gruß
25.10.2011
Nicolai Schönberg 2,4k 2 9
Ne, ich arbeite mit Windows XP und teste auch alles auf Windows XP.
starki 25.10.2011
Also bei den MSDN Beispielen haben sie der Methode OpenSubKey kein Backslash als erstes Zeichen mit gegeben. Schon ausprobiert es weg zu lassen? Ansonsten hätte ich spontan keine Idee mehr
Nicolai Schönberg 25.10.2011
1
Achso vll noch ein kleiner Tipp zum Stil: Teile deinen Test besser in 4 auf. Dann kannst du besser sehen welche Tests klappen und welche nicht - Du hast sonst unter umständen den Fall das ProgID mal nicht da ist aber alle anderen 3 schon. Dann klappt dein Test nie und du musst erst genauer hinschauen. Wenn du es in 4 Teile splittest gehen immerhin schon mal 3 gut und einer schlägt fehl

Gruß
Nicolai Schönberg 25.10.2011
Wenn wir schon bei Empfehlungen sind: Assert.IsNotNull(testKey1) wäre hier auch passender.
Matthias Hlawatsch 25.10.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH