【发布时间】:2011-04-09 12:42:04
【问题描述】:
我想开始使用单元测试,但我很难理解如何在我当前的项目中使用它们。
我当前的项目是一个将文件收集到“目录”中的应用程序。然后,Catalog 可以从它包含的文件中提取信息,例如缩略图和其他属性。用户还可以使用其他自定义元数据标记文件,例如“作者”和“注释”。它可以很容易地与 Picasa 或 Adobe Lightroom 等相册应用程序进行比较。
我已将用于创建和操作Catalog 的代码分离到一个单独的 DLL 中,我现在想对其进行测试。但是,我的大多数类从来都不是要自己实例化的。相反,一切都是通过我的Catalog 课程发生的。例如,我无法单独测试我的File 类,因为File 只能通过Catalog 访问。
作为单元测试的替代方案,我认为编写一个测试程序来运行一系列操作(包括创建目录、重新打开已创建的目录以及操作目录的内容)会更有意义。目录。请参阅下面的代码。
//NOTE: The real version would have code to log the results and any exceptions thrown
//input data
string testCatalogALocation = "C:\TestCatalogA"
string testCatalogBLocation = "C:\TestCatalogB"
string testFileLocation = "C:\testfile.jpg"
string testFileName = System.IO.Path.GetFileName(testFileLocation);
//Test creating catalogs
Catalog catAtemp = Catalog(testCatalogALocation)
Catalog catBtemp = Catalog(testCatalogBLocation );
//test opening catalogs
Catalog catA = Catalog.OpenCatalog(testCatalogALocation);
Catalog catB = Catalog.OpenCatalog(testCatalogBLocation );
using(FileStream fs = new FileStream(testFileLocation )
{
//test importing a file
catA.ImportFile(testFileName,fs);
}
//test retrieving a file
File testFile = catA.GetFile(System.IO.Path.GetFileName(testFileLocation));
//test copying between catalogs
catB.CopyFileTo(testFile);
//Clean Up after test
System.IO.Directory.Delete(testCatalogALocation);
System.IO.Directory.Delete(testCatalogBLocation);
首先,我错过了什么吗?有没有办法对这样的程序进行单元测试?其次,是否有某种方法可以像上面的代码一样创建过程类型测试,但能够利用 Visual Studio 中内置的测试工具? VS2010 中的“通用测试”是否允许我这样做?
更新
感谢大家的所有回复。实际上,我的类实际上确实继承自一系列接口。 Here's a class diagram 给任何有兴趣的人。实际上我有更多的接口然后我有类。为了简单起见,我只是省略了示例中的接口。
感谢所有使用模拟的建议。我过去听过这个词,但直到现在才真正理解“模拟”是什么。我了解如何创建 IFile 接口的模拟,它表示目录中的单个文件。我还了解如何创建 IATAlog 接口的模拟版本来测试两个目录如何交互。
但我不明白如何测试我的具体 IATAlog 实现,因为它们与后端数据源密切相关。实际上,我的 Catalog 类的全部目的是读取、写入和操作它们的外部数据/资源。
【问题讨论】:
标签: c# .net unit-testing visual-studio-2010 tdd