c# - 使用 NUnit 进行测试时应该如何处理数据文件?

标签 c# visual-studio file nunit

假设我有一个文件 data.xml。我想打开这个相对于我的应用程序,首先使用例如 File.Open(data.xml) 在我的可执行文件旁边开始。我将该文件作为现有资源添加到我的 Visual Studio (2017) 项目中,并将其配置为在生成时复制到输出目录。这行得通。

我的问题是我的解决方案中有第二个项目包含我的 NUnit 测试,引用了主项目。当在我运行测试之前构建时,这不会将 data.xml 复制到测试二进制目录并且测试失败,因为它无法打开文件(很明显) .

单元测试时如何处理外部文件?我更愿意不使用绝对路径。

最佳答案

我假设您的意思是数据文件由应用程序使用,而不仅仅是由测试使用。 当 VS 将应用程序复制到您的测试输出目录时,它不会复制任何其他内容,如您所见。

有几种方法可以到达这里...

  1. 向您的测试项目添加构建后步骤,以将文件从应用程序输出目录复制到测试输出目录。这会起作用,但维护起来很麻烦。我不推荐它。

  2. 将资源嵌入到您的应用中并将其更改为使用资源而不是外部文件。缺点是它可能需要在应用程序中进行多项更改,具体取决于您访问数据的方式。如果意图是更改文件将立即更改应用程序的行为而无需重新编译,则它根本不起作用。

  3. 更改一个或两个应用程序以使用通用输出目录。这样,只要数据发生变化,它就会被复制并可供所有测试使用。这就是我通常喜欢的处理情况的方式。

关于c# - 使用 NUnit 进行测试时应该如何处理数据文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47674684/

相关文章:

c - 为什么“while(!feof(file))”总是错误的?

c# - Linq OrderBy 使用自定义排序顺序

javascript - 如何传递 <li> 文本而不替换文本框上的文本

c# - 如何向 IEnumerable 添加一行

c# - 有没有办法在C#中实现 "void func(out params object[] parameters)"

c# - Windows 服务上传到 AWS S3

java - IntelliJ 像在 Visual Studio 中一样自动创建私有(private)字段/方法?

visual-studio - Visual Studio : Code Cleanup ignoring "Add ' this' or 'Me' qualification' fixer

python - 无法使用 MySQL 数据写入文件

c# - 可恢复文件下载问题 -> 当文件大小超过 Int32.MaxValue(2GB)(大文件)时