NUnitの3.4.1、JustMock 2016.2.713.2私のモックで大文字と小文字を区別しない文字列を扱うことはできますか?
は、私がテスト対象のクラスを持っている:それは作品
[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);
}
:また
public class AppManager {
public string[] GetAppSets() => Registry.LocalMachine
.OpenSubKey(@"SOFTWARE\Autodesk\AutoCAD", false)
?.GetSubKeyNames();
}
、私はGetAppSets
メソッドのテストを持っています。 appSets
変数はnull
場合は次のようになります。GetAppSets
方法は「ソフトウェア\オートデスク\ AutoCADの」または「ソフトウェア\オートデスクの\ AutoCADの」の代わりに文字列「S OFTWARE \オートデスク\ AutoCADの」を使用している場合でも、私のテストは失敗になります文字列の大文字と小文字は変更されます(そのレジストリキーはコンピュータに存在しないためです)。
ので、この場合にいずれかテスターは大文字小文字を区別しない文字列のようなパラメータを処理するために、GetAppSets
メソッドの実装(悪いバリアント)を知っているまたはを必要とします。
第2の変種は使用できますか?元の質問へ
いいえ、私の問題はその他です。文字列の大文字小文字が変更された場合(そのレジストリキーが私のコンピュータ上に存在しないため)、 'appSets'は' null'になります。今私の話題にこの追加情報を追加しました。 –
私はあなたのポイントを見ます。これはあなたのタグに記載されているように単体テストであるため、レジストリなどの他のコンポーネントとの相互作用は許可されています。 GetAppSetsにもモックを使用してください。 – Karolis
私は私のテストで私の 'GetAppSets'のためのモックを使用します。私はNUnitとJustMockフレームワークを使用します。 –