Ich möchte Komponententests für eine Klasse schreiben, die IDisposable implementiert. Die Klasse verfügt über zahlreiche private Felder, die IDisposable ebenfalls implementieren. In meinem Test möchte ich überprüfen, dass, wenn ich Dispose()
aufrufen, es korrekt Dispose()
auf alle IDisposable-Felder aufruft. Im Wesentlichen möchte ich, dass mein Komponententest wie folgt aussieht:Wie Unit Test Dispose() mit Reflektion?
var o = new ObjectUnderTest();
o.Dispose();
Assert.IsFalse(ObjectHasUndisposedDisposables(o));
Ich dachte über Reflexion, um dies zu erreichen. Es scheint, als ob dies eine ziemlich häufige Anforderung wäre, aber ich kann keine Beispiele dafür finden.
Wer hat das versucht?
BEARBEITEN - Ich möchte nicht die Einmalartikel in die zu testende Klasse injizieren müssen.
'' o.IsDisposed == true''? in Ihrem Fall wahrscheinlich: '' Assert.IsTrue (o.IsDispoed); '' –
Ich empfehle die Verwendung eines Abhängigkeitsinjektionscontainers. Die Verwaltung von verfügbaren Abhängigkeiten ist nur ein Vorteil. Wenn Ihre Klasse mehr Abhängigkeiten erstellt, die sie verfolgen und entsorgen muss, ist sie nicht von Abstraktionen abhängig. Mit DI hängt deine Klasse nur von "IWeverything" ab. Es weiß nicht, ob diese Klasse wegwerfbar ist. –