Visual Studio:撤销单元测试测试文件的读取权限

本文关键字:文件 读取 权限 测试 单元测试 Studio Visual | 更新日期: 2023-09-27 18:36:39

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

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

有什么想法吗?

Visual Studio:撤销单元测试测试文件的读取权限

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

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和最小起订量进行测试和模拟。