我是VS2010和C#单元测试的新手。我正在尝试加载应进行测试的文件。有没有像专家一样的方法?或最佳做法是什么?
我应该如何存储和加载测试资源?
我的方法是在测试项目中创建一个新文件夹,例如
+MyTestProject
+-Properties
+-....
+-Resources
+- MyFile.xml
+- OtherFile.xls
+-...
+...
//编辑:
我正在尝试针对生成的内容测试我的代码,因此我希望将这种内容按原样加载到我的单元测试框架中[ClassInitialize()]
,并为每个单元测试传递它们[TestInitialize()]
。所以我真的很想在磁盘上加载文件。模拟也是一个很好的提示,但是对于这种情况,我更喜欢采用其他方式。
您可以使用两种方法。一种是将文件作为嵌入式资源进行部署,并在测试运行时以fixture /测试类初始化方法提取它们。这种方法非常可靠(即在测试程序集的运行位置无关紧要),但稍微复杂一些(您需要将文件标记为嵌入式资源,需要了解嵌入文件时使用的命名约定-基于资源的程序集,您需要熟悉Assembly.GetManifestResourceStream()。
或者,您可以使用“松散文件”(即,未嵌入)。使用这种方法,您只需将文件标记为“始终复制”或“如果更新则复制”-这将导致文件复制到测试程序集的生成输出目录中。如果您使用的是NUnit,则可以在那里停止。如果您使用的是MSTest(Visual Studio附带的工具),则需要向您的测试类或方法添加[DeploymentItem]属性:
[DeploymentItem("MyFile.xml"[, "someoptionalsubfolder"])]
public void MyTest()
{
...
}
在上述两种情况下,我建议您对资源采用文件夹结构/命名约定,以帮助您跟踪它们。像下面这样的东西对我来说效果很好。它源于ASP.NET MVC使用和运行良好的文件夹结构。在这种方法中,您可以拥有“共享的”资源(即,对于程序集或测试类级别的一组测试来说是恒定的),但是每组测试甚至每项测试都可以具有自己的特定资源版本(例如,用于测试“无效数据”响应或测试边缘情况):
+-Resources
+-Shared
- SomeGlobalResource.xml
+-TestClass1
+-Shared
- MockData.xml
+-TestCase1
- SpecialVersionofMockData.xml
+-TestCase2
- MockDataMissingRequiredInformation.xml
+-TestCase3
- EtCetera.xml
+-...
+-TestClass2
+-Shared
+-TestCase1
+-TestCase2
+-...
+-TestClass3
...
顺便说一句,如果您采用这种方法,则可以大大简化如何使用MSTest下的DeploymentItem属性。您可以简单地在类中放置一个指令来复制整个Resource文件夹树,而不必疯狂地维护每个资源文件的属性,而只需:
[DeploymentItem("Resources\\", "Resources")]
[TestClass]
public class MyTestClass()
{
...
}
编辑:我应该指出,您仍然需要管理测试内容的路径-NUnit和MSTest都不提供基于当前正在执行的测试自动生成路径的工具。这意味着您在复制粘贴任何测试代码时必须保持正确的路径。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句