我正在从TypeMock迁移到MS Fakes。在TypeMock中我可以做这样的事情:
var fakeItem = Isolate.Fake.Instance<SPListItem>();
//some testing foo that uses the fake item Eg.
MethodUnderTest(fakeItem);
Assert.AreEqual(fakeItem["someField"], expected, "Field value was not set correctly");
在我的断言中,我可以检索由我的测试foo设置的字段值,并将其与我的预期进行比较。
使用MS Fakes时,我会做这样的事情:
var fakeItem = new ShimSPListItem()
{
//delegates in here
};
//some testing foo that uses the shim. Eg.
MethodUnderTest(fakeItem);
这次我尝试使用以下方法检查我的值:
Assert.AreEqual(fakeItem["someField"], expected, "Field value was not set correctly");
我最终遇到编译错误:
Cannot apply indexing with [] to an expression of type 'Microsoft.SharePoint.Fakes.ShimSPListItem'
在SharePoint世界中,像这样的索引是非常标准的做法,我的测试代码肯定会做到并且似乎没有任何问题。我的问题是为什么我不能在我的测试中做到这一点?我已经尝试将垫片转换为SPListItem但是不允许 - 我想我在这里遗漏了一些东西。有什么想法吗?
答案 0 :(得分:0)
所以我找到了答案:
var fakeItem = new ShimSPListItem()
{
//delegates in here
};
MethodUnderTest(fakeItem);
var item=fakeListItem as SPListItem;
Assert.AreEqual(item["someField"], expected, "Field value was not set correctly");
这不起作用 - 我无法使用'as'将fakeListItem转换为SPListItem。考虑到这一点这是有道理的,因为垫片实际上并不是从SPListItem派生而是它是一堆可以通过伪造框架连接到SPListTem的委托。
这确实有效:
var fakeItem = new ShimSPListItem()
{
//delegates in here
};
MethodUnderTest(fakeItem);
var item=(SPListItem) fakeListItem;
Assert.AreEqual(item["someField"], expected, "Field value was not set correctly");
据推测,演员阵容允许自定义转换器运行,为我们提供所需。
使用TypeMock迁移器稍微容易一点:
SPListItem fakeItem = new ShimSPListItem()
{
//delegates in here
};
MethodUnderTest(fakeItem);
Assert.AreEqual(fakeListItem["someField"], expected, "Field value was not set correctly");