これは私のインターフェイス単体テストのMEFインポート依存関係を満たすためにMoqを使用するにはどうすればよいですか?
public interface IWork
{
string GetIdentifierForItem(Information information);
}
と私のクラス
public class A : IWork
{
[ImportMany]
public IEnumerable<Lazy<IWindowType, IWindowTypeInfo>> WindowTypes { get; set; }
public string GetIdentifierForItem(Information information)
{
string identifier = null;
string name = information.TargetName;
// Iterating through the Windowtypes
// searching the 'Name' and then return its ID
foreach (var windowType in WindowTypes)
{
if (name == windowType.Metadata.Name)
{
identifier = windowType.Metadata.UniqueID;
break;
}
}
return identifier;
}
}
問題です:私はここに方法GetIdentifierForItem
が、私はそれを解決するためにやってみました何でユニットテストしたい -
(1)モックレイジーを作成し、小道具に戻す必要がある値を設定しますerty取得
var windowMock = new Mock<Lazy<IWindowType, IWindowTypeInfo>>(); windowMock.Setup(foo => foo.Metadata.Name).Returns("Data"); windowMock.Setup(foo => foo.Metadata.UniqueID).Returns("someString");
(2)
var WindowTypesList = new List<IWindowType, IWindowTypeInfo>>();
WindowTypesList.Add(windowMock.Object);
A a = new A();
a.WindowTypes = WindowTypesList;
(3)模擬情報を作成し、ウィンドウタイプリストと上記モックオブジェクトを作成し、作成したオブジェクトに設定
var InfoMock = new Mock<Information>();
InfoMock.Setup(foo => foo.TargetName).Returns("Data");
単位テストとして上記のすべてをまとめるには
[TestMethod]
public void GetIDTest()
{
var windowMock = new Mock<Lazy<IWindowType, IWindowTypeInfo>>();
windowMock.Setup(foo => foo.Metadata.Name).Returns("Data");
windowMock.Setup(foo => foo.Metadata.UniqueID).Returns("someString");
var WindowTypesList = new List<Lazy<IWindowType, IWindowTypeInfo>>();
WindowTypesList.Add(windowMock.Object);
A a = new A();
a.WindowTypes = WindowTypesList;
var InfoMock = new Mock<Information>();
InfoMock.Setup(foo => foo.TargetName).Returns("Data");
string expected = "someString"; // TODO: Initialize to an appropriate value
string actual;
actual = a.GetIdentifierForItem(InfoMock.Object);
Assert.AreEqual(expected, actual);
}
このユニットテストは実行に失敗し、例外 'TargetInvocationException'がスローされ、詳細を監視すると、実行してはいけないことがあるように見えます。
しかし、どうやって他の方法で行うのか分かりません。 Moqのクイックスタートガイドにあるリンクの一部を読んでいます。私は何かが足りないことを知っている。これを単体テストする方法を教えて助けてくれますか?