Ich habe eine große Anwendung, die einige Parameter aus einer Konfigurationsdatei liest.Ändern eines privaten statischen Readonly-Feldes
Ich schreibe Unit-Tests für eine Klasse, die ein Ergebnis nach der Durchführung bestimmte Operationen sowohl mit einem Parameter und einem Wert aus der Konfigurationsdatei gelesen erzeugt:
internal static class Password
{
private static readonly byte PASSWORD_PRIVATE_KEY
= ConfigFile.ReadByte("PASSWORD_PRIVATE_KEY");
public static byte Generate(byte passwordPublicKey);
}
In meinem Unit-Test, ich kenne die Werte Die Password.Generate()
Methode sollte für gegeben PASSWORD_PRIVATE_KEY
und PASSWORD_PUBLIC_KEY
zurückgeben. Aber ich möchte den PASSWORD_PRIVATE_KEY
Wert verwendet in der Unit-Test-Klasse definiert werden, nicht in der Konfigurationsdatei:
[TestMethod]
public void PasswordGenerate_CalculatedProperly()
{
byte passwordPublicKey = 0x22;
Password_Accessor.PASSWORD_PRIVATE_KEY = 0xF0;
byte expectedGenerated = 0xAA;
byte generated = Password_Accessor.Generate(passwordPublicKey);
Assert.AreEqual(expectedGenerated, generated);
}
Gibt es eine Weise, die ich die private static readonly
durch Code schreiben kann, so dass ich nicht haben Verlasse ich irgendeine Konfigurationsdatei für meine Tests?
Beachten Sie, dass die Frage anders lautet: http://StackOverflow.com/q/6851816/1192381 –
Die kanonische Antwort lautet: "Verwenden Sie kein statisch initialisiertes' private static'-Feld "- refaktorieren Sie die' Password'-Klasse also erwirbt er den Wert für 'PASSWORD_PRIVATE_KEY' aus einer Collaborator-Klasse, die Sie dann nachahmen können.In diesem Fall scheint es, als wäre 'ConfigFile' nicht statisch die Antwort. – millimoose
Im Allgemeinen ist "statisch" der eingeschworene Feind des Unit-Tests. – millimoose