這是我的接口如何使用起訂量來滿足一個單元測試MEF進口的依賴?
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」和veiwing細節,它看起來像我做的東西,我不應該做的事情。
但我不知道怎麼做的其他方式。我已閱讀Moq快速入門指南中的一些鏈接。我知道我錯過了一些東西。你能通過指導如何進行單元測試來幫助我嗎?