2010-10-07 34 views
0

我在Silverlight(inbrowser)UnitTesting中使用Mock將文件讀入我的ViewModel中遇到困難。Silverlight在瀏覽器中單元測試模擬<FileInfo>

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

變種的fileInfo =新莫克(); //我無法模擬FileInfo

var fileInfo = new FileInfo(「test.jpg」);


謝謝喬尼,我做了如下,不工作,這裏是我的示例代碼剪斷。

新的接口類

公共接口IFileInfo {字符串名稱{;設置;}的FileStream打開(的FileMode模式); }

新的包裝類

公共類FileInfoWrapper:IFileInfo {私人的FileInfo的fileInfo;公共FileStream OpenRead(){返回this.OpenRead(); } public string Name {get {return this.Name; } set {this.Name = value; }}

}

在我的測試類

[TestMethod的] [異步]公共無效MultiFileDropTest(){列表wrapperList =新列表(); 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()); 

}

//我的功能(視圖模型)公共的BitmapImage SingleImageDropTest(IDataObject的IDATA){............. var中的文件=(的FileInfo [])dataObject時。的GetData(DataFormats.FileDrop);

 ...taking the first file from the files collection 
     FileInfo file = files[0]; 

     if (file != null && IsImageFile(file.Extension)) 
     { 

//文件中讀取並返回其做工精細 }}

+0

它以什麼方式不起作用?它是否編譯?測試失敗或通過不正確?您的測試似乎設置了一些模擬對象,但似乎沒有測試任何東西。 – 2010-10-11 12:24:04

+0

我仍然停留在該代碼的中間,所以我找到了一些方法 – SOFextreme 2010-10-13 05:21:42

回答

0

從我猜你想使用的起訂量架構,它使用語法你寫的代碼位代碼

var fileInfo = new Mock<Interface>(); 

您需要提供一個類型,以便框架能夠預測期望的行爲。

在這種情況下,您將無法將Interface替換爲FileInfo,因爲FileInfo是一個具體的類。你的選擇是:

  1. 發現FileInfo類器具,具有方法,你需要使用的,並且使用您的視圖中的變量時一個抽象類或接口,聲明它爲類型

  2. (更可能)創建一個封裝Fileinfo類的類以及它實現的接口,其中包含您需要的方法,並將視圖中的變量聲明爲該接口類型。