c# – 使用文件IO的单元测试方法
我正在尝试编写单元测试的习惯,我之前已经写了几个,但是它们通常是相当基本的…我想开始向TDD转移,因为我想提高质量我的代码(设计和结构) – 减少耦合,同时希望减少回归到可测试版本的回归数.
我采取了一个比较简单的项目,我开始工作.结果程序观看一个文件夹,然后对该文件夹中的文件进行操作. 以下是从项目中提取的一些代码的典型示例: private string RestoreExtension(String file) { var unknownFile = Path.GetFileName(file); var ignoreDir = Path.GetDirectoryName(file) + "Unknown"; string newFile; //We need this library for determining mime if (CheckLibrary("urlmon.dll")) { AddLogLine("Attempting to restore file extension"); var mime = GetMimeType(BufferFile(file,256)); var extension = FileExtensions.FindExtension(mime); if (!String.IsNullOrEmpty(extension)) { AddLogLine("Found extension: " + extension); newFile = file + "." + extension; File.Move(file,newFile); return newFile; } } else { AddLogLine("Unable to load urlmon.dll"); } AddLogLine("Unable to restore file extension"); if (!Directory.Exists(ignoreDir)) { Directory.CreateDirectory(ignoreDir); } var time = DateTime.Now; const string format = "dd-MM-yyyy HH-mm-ss"; newFile = ignoreDir + "" + unknownFile + "-" + time.ToString(format); File.Move(file,newFile); return String.Empty; } 问题: 如何使用IO测试方法? 这样的项目是否值得单位测试? 这个项目中的很多方法都是私有的,因为这个项目恰好是Windows服务.我读过你应该只是真正测试外部可见的方法(公开或通过界面暴露),但是在这种情况下,我不太可能会公开我自己的任何方法.这个项目是否值得测试(因为id可能需要将方法访问修饰符更改为public或添加一些属性,以便NUnit可以看到它们)? 干杯 解决方法
关于如何测试文件I / O:
这样做的一个常见方法是将File I / O封装在包装器类中.例如: public class FileHandler : IFileHandler { public string GetFilename(string name) { return System.IO.GetFileName(name); } public string GetDirectoryName(string directory) { return System.IO.GetDirectoryName(directory); } } public interface IFileHandler { string GetFilename(string name); string GetDirectoryName(string directory); } 在您的测试方法中,您只能针对该接口进行编程.运行单元测试时,您将使用返回预定义值的模拟对象.为此,您可以使用Moq. 这是一个有点工作,但是你不需要测试文件I / O. 最好一月 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |