我使用moq和我的问题Tfs属性(ItemSet),如何使用moq,因为ItemSet只能得到...
public sealed class ItemSet
{
public Item[] Items { get; }
public string Pattern { get; }
public string QueryPath { get; }
public override string ToString();
}
样品,
ItemSet allItems = versionControl.GetItems(@"$/");
如何写单元测试和模拟?
答案 0 :(得分:2)
你不能使用Moq来模拟密封的类。
您可以编写一系列proxies来封装密封的TFS类,其中每个代理都基于您可以用来编写测试的抽象。
通常(特别是对于像对象一样的集合),可以使用密封类并使用test builder类或类似方法来消除实例化所有依赖项并将所有依赖项插入到一起的痛苦。在您的情况下,您需要创建所有项目,模式和QueryPath(以及每个项目的所有依赖项,如果有的话),并创建一个具有测试安全值的真实ItemSet。
答案 1 :(得分:1)
您可以在非密封类上使用SetupGet方法。
Mock<ItemSet> itemSetMock = new Mock<ItemSet>();
itemSetMock.SetupGet(x => x.Items).Returns(someItems);
我不知道Moq如何处理密封类,但在单元测试中模拟抽象而不是具体类是个好主意。