2010-10-07 5 views
0

Je suis confronté à des difficultés dans Silverlight (inbrowser) UnitTesting en utilisant Mock pour lire un fichier dans mon ViewModel.Silverlight dans le navigateur UnitTesting Mock <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. 

par exemple:

unittesing.cs

var fileinfo = new Mock(); // Je ne peux pas mock FileInfo

var fichierInfo = nouveau FichierInfo ("test.jpg");


Merci Jonny, j'ai fait comme suit et ne fonctionne pas et voici mon exemple de code snipped.

nouvelle classe d'interface

interface publique IFileInfo {Nom de chaîne {get; ensemble;} FileStream ouvert (mode FileMode); }

nouvelle classe wrapper

public class FileInfoWrapper: {IFileInfo FileInfo privé Fileinfo; public FileStream OpenRead() {return this.OpenRead(); } chaîne publique Nom {get {return this.Name; } set {this.Name = valeur; }}

}

Dans mon test de classe

[TestMethod] [Asynchronous] public void MultiFileDropTest() {liste wrapperList = nouvelle liste(); fileInfo.Setup (fl => fl.Name) .Retours ("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()); 

}

// ma fonction (ViewModel) publique BitmapImage SingleImageDropTest (IDataObject iData) {var ............. fichiers = (FileInfo []) dataObject. GetData (DataFormats.FileDrop);

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

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

// Lire un fichier et renvoie le code bitmap qui fonctionne bien }}

+0

En quoi cela ne fonctionne-t-il pas? Est-ce qu'il compile? Est-ce que le test échoue ou passe incorrectement? Votre test semble définir certains objets simulés, mais ne semble pas tester quoi que ce soit. –

+0

Je suis toujours coincé au milieu de ce code, donc je trouve des façons – SOFextreme

Répondre

0

À partir du code que vous avez écrit, je devine que vous essayez d'utiliser le cadre de moq, qui utilise la syntaxe

var fileInfo = new Mock<Interface>(); 

Vous devez fournir un type, afin que l'infrastructure ait une idée du comportement à attendre. Dans ce cas, vous ne pourrez pas remplacer Interface par FileInfo, car FileInfo est une classe concrète. Vos alternatives sont:

  1. trouver une classe abstraite ou une interface que les outils de la classe FileInfo, qui a les méthodes que vous devez utiliser, et lorsque vous utilisez la variable sur votre point de vue, déclarer comme ce type

  2. (plus probable) créer une classe qui enveloppe la classe Fileinfo, et une interface qu'il implémente, qui inclut la ou les méthodes dont vous avez besoin, et déclarez votre variable dans votre vue en tant que type d'interface.