浏览器中的 Silverlight UnitTesting Mock<FileInfo>
Posted
技术标签:
【中文标题】浏览器中的 Silverlight UnitTesting Mock<FileInfo>【英文标题】:Silverlight in browser UnitTesting Mock<FileInfo> 【发布时间】:2011-04-22 04:51:50 【问题描述】:我在 Silverlight (inbrowser) UnitTesting 中遇到困难,使用 Mock 将文件读入我的 ViewModel。
It gives me an AccessDenied error message. Is there another alternative method for that kind of problem?
My UnitTesting is DragAndDrop Image file in Silverlight 4.
例如: unittesing.cs
var fileInfo = new Mock(); //我不能模拟文件信息
var fileInfo = new FileInfo("test.jpg");
感谢 Jonny,我按照以下操作但没有工作,这是我的示例代码。
新的接口类
public interface IFileInfo string Name get;set ; FileStream Open(FileMode mode);
新的包装类
公共类 FileInfoWrapper : IFileInfo private FileInfo fileInfo; public FileStream OpenRead() return this.OpenRead(); public string Name get return this.Name; 设置 this.Name = value;
在我的测试课中
[TestMethod] [Asynchronous] public void MultiFileDropTest() list wrapperList = new list(); fileInfo.Setup(fl => fl.Name).Returns("testing.jpg");
fileInfo.Setup<Stream>(fl => fl.OpenRead()).Returns(fileStream.Object);
wrapperList .Add(fileInfo.Object);
wrapperList .Add(fileInfo.Object);
idataObject.Setup(p => p.GetData(DataFormats.FileDrop)).Returns(wrapperList .ToArray());
// 我的函数 (ViewModel) public BitmapImage SingleImageDropTest(IDataObject iData) ...... var files = (FileInfo[])dataObject.GetData(DataFormats.FileDrop);
...taking the first file from the files collection
FileInfo file = files[0];
if (file != null && IsImageFile(file.Extension))
//文件读取并返回工作正常的位图代码
【问题讨论】:
在什么情况下它不起作用?它编译吗?测试是否失败或错误通过?您的测试似乎设置了一些模拟对象,但似乎没有测试任何东西。 我仍然被困在代码中间,所以我正在寻找一些方法 【参考方案1】:根据您编写的代码,我猜您正在尝试使用 moq 框架,它使用语法
var fileInfo = new Mock<Interface>();
您需要提供一个类型,以便框架了解预期的行为。
在这种情况下,您将无法用 FileInfo 替换 Interface,因为 FileInfo 是一个具体的类。您的替代方案是:
找到一个 FileInfo 类实现的抽象类或接口,它具有您需要使用的方法,并在您的视图上使用该变量时,将其声明为该类型
(更有可能)创建一个包装 Fileinfo 类的类和一个它实现的接口,其中包括您需要的方法,并在您的视图中将您的变量声明为该接口类型。
【讨论】:
以上是关于浏览器中的 Silverlight UnitTesting Mock<FileInfo>的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight是否比JavaScript具有性能优势?
Beginning Silverlight 4 in C#-导航