Ich muss Einheit eine geschützte Methode testen, da es einige Kernlogik hat (ich kann diesen Teil nicht ändern, da er nicht in meiner Kontrolle ist). Es ändert keine Mitglieder und kann daher keine darauf basierenden Behauptungen schreiben. Es gibt nichts zurück, außer das Lesen aus einer Registrierung und das Schreiben in eine Protokolldatei. Wie kann ich einen Komponententest mit Moq und Visual Studio NUnit Test für dieses Szenario schreiben:Einheit, die eine void-Methode testet, die in eine Datei schreibt und keine Klassenmitglieder mutiert
protected override void OnPluginStarting()
{
try
{
using (var key = registryAccessor.LocalMachine.OpenSubKey(ProdInstallRegKey))
{
foreach (string subkeyName in key.GetSubKeyNames())
{
using (var subkey = key.OpenSubKey(subkeyName))
{
string displayName = subkey.GetValue("DisplayName") == null ? string.Empty : subkey.GetValue("DisplayName").ToString();
if (!string.IsNullOrEmpty(displayName) && installedProducts.ContainsKey(displayName))
{
Log.Info(installedProducts[displayName] + " version is " + subkey.GetValue("DisplayVersion"));
}
}
}
}
}
catch (Exception ex)
{
Log.Error("An error occured while getting the version numbers of DDP components. "+ex.Message);
}
}
RegistryAccessor
ein Wrapper für die Registry ist und ich habe es so, dass ich es aus meinen Unit-Tests spotten kann. Aber wie kann ich das Pseudo-Registrierungsobjekt an die Methode übergeben, wenn es keine Parameter verwendet? Die einzigen Dinge, die ich herausgefunden habe, ist, dass ich PrivateObject
verwenden kann, um private
und protected
Instanzen zu erstellen. Könnte jemand bitte helfen?
registryAccessor wie ein Membervariable sieht, wo es definiert/aktuelles/initialisiert? – forsvarir