Silverlight在浏览器UnitTesting Mock <FileInfo>中
我在使用Mock在我的ViewModel中读取文件的Silverlight(inbrowser)UnitTesting中遇到困难。
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(); //我无法模拟FileInfo
var fileInfo = new FileInfo(“test.jpg”);
谢谢Jonny,我按照以下步骤工作,而不是工作,这里是我的示例代码剪切。
新的界面类
public interface IFileInfo {string Name {get; set;} FileStream Open(FileMode mode); }
新的包装类
公共类FileInfoWrapper:IFileInfo {私人FileInfo fileInfo; 公共FileStream OpenRead(){返回this.OpenRead(); } public string Name {get {return this.Name; } set {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))
{
//文件读取并返回工作正常的位图代码}}
从你写的代码中,我猜你正在尝试使用moq框架,它使用语法
var fileInfo = new Mock<Interface>();
您需要提供一种类型,以便框架能够预测期望的行为。
在这种情况下,您将无法将Interface替换为FileInfo,因为FileInfo是一个具体的类。 您的选择是:
找到FileInfo类实现的抽象类或接口,它具有您需要使用的方法,并且在视图上使用变量时,将其声明为该类型
(更可能)创建一个包装Fileinfo类的类以及它实现的接口,其中包含您需要的方法,并将视图中的变量声明为该接口类型。
上一篇: Silverlight in browser UnitTesting Mock<FileInfo>
下一篇: how to mock an interface that needs to be cast to another interface?