浏览器中的Silverlight UnitTesting Mock <fileinfo> </fileinfo>

时间:2010-10-07 06:09:39

标签: c# unit-testing silverlight-4.0 mocking

我在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 =&gt; 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 个答案:

答案 0 :(得分:0)

从您编写的代码中我猜你正在尝试使用moq框架,它使用语法

var fileInfo = new Mock<Interface>();

您需要提供一个类型,以便框架能够了解所期望的行为。

在这种情况下,您将无法用FileInfo替换Interface,因为FileInfo是一个具体的类。您的替代方案是:

  1. 找到FileInfo类实现的抽象类或接口,它具有您需要使用的方法,并且在视图上使用该变量时,将其声明为该类型

  2. (更有可能)创建一个包装Fileinfo类的类,以及它实现的接口,其中包含您需要的方法,并在视图中声明您的变量作为该接口类型。