我正在使用C#中的Visual Studio(Community 2015)项目从视频文件中读取元数据。因此,我想写一个单元测试来测试程序是否以正确的方式处理无法访问的文件。所以我想在我的测试数据中添加一个测试文件,单元测试没有读取权限。
但是最好的方法是什么?我没有找到任何在Visual Studio中设置权限的选项。我目前唯一的想法是直接在文件属性中撤消读取权限。通过Windows文件资源管理器,因此在Visual Studio之外。但后来我无法自己阅读该文件。此外,它似乎不是正确的方式,我认为应该有一个更干净的方法直接在Visual Studio中解决这个问题。
有什么想法吗?
答案 0 :(得分: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进行测试和嘲笑。