0

Je travaille sur un projet Visual Studio (Community 2015) en C# qui lit les métadonnées des fichiers vidéo. Par conséquent, je veux écrire un Unit Test qui teste si le programme gère un fichier inaccessible dans le bon sens. Donc, je veux ajouter un fichier de test à mes données de test pour lesquelles le test d'unité n'a pas les permissions de lecture.Visual Studio: révocation de l'autorisation de lecture du fichier test pour les tests unitaires

Mais quelle est la meilleure façon de le faire? Je n'ai trouvé aucune option pour définir des autorisations dans Visual Studio. La seule idée que j'ai en ce moment est de révoquer directement les permissions de lecture dans les propriétés du fichier. Grâce à l'explorateur de fichiers Windows, donc en dehors de Visual Studio. Mais je ne serais pas capable de lire le fichier moi-même. En outre, il ne semble pas être le bon chemin et je pense qu'il devrait y avoir une façon plus propre de résoudre ce problème directement dans Visual Studio.

Des idées?

Répondre

1

Si vous écrivez un test unitaire, vérifiez simplement si votre code est correctement écrit et non les problèmes externes qui sont difficiles à reproduire ou qui ne sont pas disponibles sur d'autres machines. Donc, je pense que vous devriez lire sur l'injection de dépendance et comment faire des dépendances fictives dans votre test. Je peux vous donner un exemple facile à comprendre, mais s'il vous plaît, écrivez-le dans vos mots.

public interface IFileReader 
{ 
    string ReadFile(string filePath); 
} 


public class FileReader : IFileReader 
{ 
    public string ReadFile(string filePath) 
    { 
     return System.IO.File.ReadAllText(filePath); 
    } 
} 

Alors Supposons que vous ayez une VideoMetaDataReader de classe puis dans cette classe, vous injectez l'interface en tant que dépendance et utiliser la méthode ReadFile pour lire. Et puis dans votre test

[TestFixture] 
    public class FileReaderTests 
    { 
     [Test] 
     public void ShouldDisplayANiceMessage_WhenFileIsInaccessible() 
     { 
      var moq = new Moq.Mock<IFileReader>(); 
      moq 
       .Setup(x => x.ReadFile(Moq.It.IsAny<string>())) 
       .Throws<Exception>(); 

      var metaDataReader = new MetaDataReader(moq.Object); 
      metaDataReader.ReadVideoFile("video.mp4"); 
      Assert.AreEqual(1, meaDataReader.Errors.Count);  
     } 
    } 

Je suppose qu'il y aura une propriété erreurs qui renvoie les erreurs rencontrées, mais cela dépend comment vous voulez le faire (je ne pensais pas trop à ce sujet).

De toute façon, le but est de ne pas tester ce qui n'est pas couvert par votre code. Ce que votre code doit faire est d'afficher un bon message s'il y a une exception et que vous pouvez faire si vous vous moquez de l'interface (ce qui signifie ne pas appeler l'implémentation réelle et faire quelque chose que je veux dans ce test) vérifiez si votre code peut gérer cela. btw j'ai utilisé nunit et moq pour tester et moquer.

+0

Merci beaucoup! Cela semble être ce que je cherchais. je vais essayer –