0

我正在使用C#中的Visual Studio(Community 2015)项目来读取视频文件中的元数据。因此我想编写一个单元测试,测试程序是否以正确的方式处理不可访问的文件。所以我想添加一个测试文件到单元测试没有读取权限的测试数据。Visual Studio:撤消单元测试的测试文件的读取权限

但是,这样做的最好方法是什么?我没有在Visual Studio中找到任何设置权限的选项。我目前唯一的想法是直接撤消文件属性中的读取权限。通过Windows文件资源管理器,因此在Visual Studio之外。但后来我无法自己读取文件。此外,它似乎不是正确的方式,我认为应该有一个更简洁的方式直接在Visual Studio中解决这个问题。

任何想法?

回答

1

如果您正在编写单元测试,那么它应该检查您的代码是否正确编写,而不是检查难以复制或可能无法在其他机器上使用的外部问题。所以我认为你应该阅读关于依赖注入以及如何在你的测试中做模拟依赖。我可以给你一个容易理解的例子,但请用你的话写下来。

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


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

所以假设你有一个类VideoMetaDataReader然后在类,你会注入接口的依赖和使用ReadFile的方法来读取。然后在您的测试

[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);  
     } 
    } 

我猜想会有这将返回错误时遇到一个错误的属性,但它取决于你怎么想这样做(我没有想到在这个太多了)。

无论如何,关键是不要测试你的代码没有涵盖什么。你的代码需要做的是在出现异常时显示一条好消息,并且如果你嘲笑接口(这意味着不要调用实际的实现,而是在这个测试中做一些我想做的事),然后执行检查你的代码是否可以处理。顺便说一句,我用nunit和moq进行测试和嘲笑。

+0

谢谢!这似乎是我正在寻找的。我会尝试 –