我在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(); //我无法模拟FileInfo
var fileInfo = new FileInfo(“test.jpg”);
感谢Jonny,我按照以下方式做了,但没有工作,这是我的示例代码剪辑。
新界面类
public interface IFileInfo {string Name {get; set;} FileStream Open(FileMode mode); }
新的包装类
public class FileInfoWrapper:IFileInfo {private FileInfo fileInfo; public FileStream OpenRead(){return 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))
{
//文件读取并返回工作正常的位图代码 }}
答案 0 :(得分:0)
从您编写的代码中我猜你正在尝试使用moq框架,它使用语法
var fileInfo = new Mock<Interface>();
您需要提供一个类型,以便框架能够了解所期望的行为。
在这种情况下,您将无法用FileInfo替换Interface,因为FileInfo是一个具体的类。您的替代方案是:
找到FileInfo类实现的抽象类或接口,它具有您需要使用的方法,并且在视图上使用该变量时,将其声明为该类型
(更有可能)创建一个包装Fileinfo类的类,以及它实现的接口,其中包含您需要的方法,并在视图中声明您的变量作为该接口类型。