NUnit 3.4.1, JustMock 2016.2.713.2Puis-je gérer la chaîne insensible à la casse dans ma maquette?
je la classe en cours de test:
public class AppManager {
public string[] GetAppSets() => Registry.LocalMachine
.OpenSubKey(@"SOFTWARE\Autodesk\AutoCAD", false)
?.GetSubKeyNames();
}
Aussi, j'ai le test GetAppSets
méthode:
[Test]
public void GetAppSets_Returns_ValidValue() {
const string subkey = @"SOFTWARE\Autodesk\AutoCAD";
/* The sets of applications which are based on
* AutoCAD 2009-2017. */
string[] fakeSets = new[] { "R17.2", "R18.0",
"R18.1", "R18.2", "R19.0", "R19.1", "R20.0",
"R20.1","R21.0" };
RegistryKey rk = Mock.Create<RegistryKey>();
Mock.Arrange(() => rk.GetSubKeyNames()).Returns(
fakeSets);
Mock.Arrange(() => Registry.LocalMachine.OpenSubKey
(subkey, false)).Returns(rk);
AppManager appMng = new AppManager();
string[] appSets = appMng.GetAppSets();
Assert.AreEqual(fakeSets, appSets);
}
Il fonctionne. Mais mon test sera l'échec si la méthode GetAppSets
utilise "Software \ Autodesk \ AutoCAD" ou "software \ autodesk \ autocad" string au lieu de "S OGICIELS \ Autodesk \ AutoCAD": la variable appSets
sera null
si chaîne de caractères sera changé (parce que cette clé de registre n'existe pas sur mon ordinateur).
Donc, à ce cas soit testeur a besoin de savoir la mise en œuvre de la méthode GetAppSets
(la mauvaise variante), ou pour traiter le paramètre comme le insensible à la casse chaîne.
Est-il possible d'utiliser la deuxième variante?
Non, mon problème est autre. Le 'appSets' sera' null' si la chaîne de caractères sera modifiée (parce que cette clé de registre n'existe pas sur mon ordinateur). J'ai ajouté cette information supplémentaire dans mon sujet en ce moment. –
Je vois ce que vous voulez dire. Il s'agit d'un test unitaire tel qu'indiqué dans vos balises, ainsi l'interaction avec d'autres composants tels que le registre est autorisée. Utilisez aussi un simulateur pour GetAppSets. – Karolis
J'utilise un simulacre pour mes 'GetAppSets' dans mon test. J'utilise les frameworks NUnit et JustMock. –