如何使数据文件可用于单元测试?

2023-12-03

我正在使用 VS2008 TFS(带有 MSTest)。

我有一个可靠工作的单元测试,依赖于项目子文件夹中的数据文件(即 testproject1\TestData)。数据文件属性为“构建操作=内容”、“始终复制”。 (它本身不是测试数据文件,而是生产代码读取的文件,通常需要在其自己的文件夹中)

当测试构建并执行时,数据文件被正确复制到 ...\TestResults\(testruniD)\Out 文件夹,并且测试代码找到它。

现在,我将测试及其数据文件移动到解决方案中的另一个测试项目(它真正应该在的位置),数据文件位于相对于新测试项目 (testproject2\TestData) 的同一文件夹中,并且数据文件属性经检查仍如上。但是,在重建时,测试在新位置失败,因为数据文件尚未复制到测试结果输出文件夹,因此执行代码无法找到它。

我应该做一些额外的事情来确保数据文件仍然被复制吗?

我以前遇到过一个相关的问题,一些数据文件被复制到测试结果输出文件夹,而另一些则没有,没有明显的原因,这让我感到困惑。

TIA


我知道这已经晚了。接受的答案在技术上是正确的。然而这些年来我发现部署属性当您有太多数据文件时,该方法会变得很麻烦。就我而言,它接近一千。问题是

  1. 请记住将每个文件标记为复制到输出 .
  2. 每次我调试项目时,数千个数据文件都会被复制到MyUnitTestProject\Bin\调试。这减慢了我的整体开发和调试体验。

建议的解决方案

我建议的解决方案是让数据文件在单元测试项目中保留为静态文件,并简单地使用Location执行者的财产系统.反射.装配。考虑到我正在处理大量数据文件,这对我来说非常有效。测试运行时效果良好Jenkins构建服务器。

你可以参考我在另一个答案中发布的代码片段。NUnit 部署项

我提出的解决方案的缺点

每次运行测试时,您不会创建新的部署文件夹。如果您的单元测试要创建输出文件,那么您负责在单元测试程序集的位置下生成一个新文件夹,通常是MyUnitTestProject\Bin\调试.

在此处发布代码,因为我的超链接答案已被删除一个名叫 Martijn Pieters 的人删除了我原来的答案,因为他不喜欢重复。因此我在这里复制原始代码。

    internal static string GetFullPathToFile(string pathRelativeUnitTestingFile)
{
    string folderProjectLevel = GetPathToCurrentUnitTestProject();
    string final = System.IO.Path.Combine(folderProjectLevel, pathRelativeUnitTestingFile);
    return final;
}
/// <summary>
/// Get the path to the current unit testing project.
/// </summary>
/// <returns></returns>
private static string GetPathToCurrentUnitTestProject()
{
    string pathAssembly = System.Reflection.Assembly.GetExecutingAssembly().Location;
    string folderAssembly = System.IO.Path.GetDirectoryName(pathAssembly);
    if (folderAssembly.EndsWith("\\") == false) folderAssembly = folderAssembly + "\\";
    string folderProjectLevel = System.IO.Path.GetFullPath(folderAssembly + "..\\..\\");
    return folderProjectLevel;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使数据文件可用于单元测试? 的相关文章

随机推荐

  • 事件源的性能

    我目前正在开发一个大型项目 需要实现服务器发送的事件 我决定使用事件源传输 并从简单的聊天开始 目前客户端仅监听新的聊天消息事件 但项目将来会有更多事件 首先 我真的很关心服务器端脚本及其循环 其次 我不确定使用mySQL数据库作为存储 在
  • 如何提取 MongoError: E11000 找到重复键的错误消息?

    如何提取错误消息MongoError E11000发现重复的钥匙 我只想要错误本身消息而不是整个对象 我将用一个例子来解释这一点 在mongo shell db test insertOne id 1 insert a document t
  • 在过去 365 天窗口中执行运行总计的有效方法

    这就是我的数据框的样子 库 数据 表 df lt fread Name EventType Date SalesAmount RunningTotal Runningtotal prior365Days John Email 1 1 201
  • 仅第一次记录显示,除非强制处置

    我正在使用 vs 2017 写一个netcoreapp2 0库 并使用 UnitTest 项目对其进行测试 XUnit 和 NUnit 给出相同的结果 我注意到除非我强行处置我的Serilog记录器 只有第一行会出现在Seq 这是我的两堂课
  • AWS 负载均衡器后面使用 Traefik 进行 HTTPS 重定向

    我正在尝试将所有传入的 Traefik 从 http 重定向到 https 以便从具有自定义端口的 docker 容器提供服务的 Web 应用程序 如果我构建这个 docker compose 文件 并扩展应用程序 一切都会按预期工作 我能
  • Ember Simple Auth 自定义验证器

    我一直在尝试创建一个session currentUser财产与id email and points特性 我正在参考使用 Ember 简单身份验证 Ember CLI 的自定义身份验证器 and 如何在会话中存储用户 但我就是不明白这些部
  • 使用 std::ranges::min 投影在 std::map 上

    是否可以在 std map 上投影 我尝试将 std ranges min 与投影一起使用 但它似乎会抛出错误 我无法解释为什么它不喜欢东西 include
  • 可以在自定义进度条progressDrawable中做圆角吗?

    I have a progress bar that is supposed to look like the attached image And I ve made it a long way I m very close the on
  • jMockit:如何期望构造函数调用模拟对象?

    我正在对执行一些序列化操作的方法进行单元测试 我打算模拟序列化逻辑 代码如下 ObjectInputStream ois new ObjectInputStream new BufferedInputStream new FileInput
  • 移植到 VS2015 / .NET 4.6 后,C++/CLI DLL 在加载时崩溃

    老实说 这可能是一个骗局VS2015 迁移的项目可以编译 但无法运行 调试断言失败 但这没有答案 我有更多细节 最近将我们的代码库从针对 v4 0 的 VS2010 移植到针对 v4 6 的 VS2015 我们有一个托管 C DLL 来提供
  • 更改模块目录后的 Python pickle

    我最近更改了程序的目录布局 之前 我将所有模块都放在 main 文件夹中 现在 我已将它们移动到以程序命名的目录中 并放置了一个 init py在那里制作一个包裹 现在 我的主目录中有一个 py 文件 用于启动我的程序 这更加简洁 不管怎样
  • Log4j2 不同级别的不同appender

    我有一个小问题 找不到解决方案 我想为级别信息而不是级别警告设置图案布局 如果我的登录级别为INFO 则一切正常 但如果日志级别为INFOWARN它被写入控制台两次 作为级别信息和级别警告 简而言之 特定级别的所有日志都会写出该级别及其下级
  • yii2 当超链接不在pjax中时如何使用pjax

    在 yii2 中使用 pjax 就像 h1 Current time h1 但如果超链接不在 就像
  • 如何处理 SharePoint 异常?

    我是 SharePoint 新手 所以我想我需要如何处理异常 当我编写自定义代码时 我是否必须检查它们 或者如果抛出它们 它们会自动记录并且不会破坏应用程序 如果没有 那么我如何记录它们 谢谢你 编辑 我应该如何记录这些异常 使用它写入日志
  • C++ 唯一静态 ID 和类名以及基类

    正在上课TaskBase 它的每个派生类必须有名称和唯一的id The TaskBase如下所示 class TaskBase public static const int id return an unique id for each
  • 我试图在函数触发时获取目标元素的 id,但是 `this` 关键字返回 `undefined`

    我试图在函数触发时捕获目标元素的 id 但是this关键字返回undefined HTML 文件 我无法添加任何参数onclick功能 我有很多 a 在页面中添加标签并想要识别女巫 a 标签被点击 a href some links Get
  • NSURL 在某些情况下返回 nil

    我正在创建一个NSURL作为请求发送至PHP rest API我已经设置好了 下面是我的代码 NSMutableString url NSMutableString stringWithFormat http www private com
  • 使用 Symfony 中的 Doctrine 更新多个列

    我必须更新 Symfony 中的多个列 但我找不到解决方案 所以 我想这样做 q Doctrine Query create gt update WebusersTable q gt set q login name John gt whe
  • 无法使用ajax将数据传递到razor页面

    我正在尝试将一些数据发送到剃刀页面方法 但问题是在方法中它始终需要0 代码如下 剃刀页面 public IActionResult OnGetProducts int page var products productRepository
  • 如何使数据文件可用于单元测试?

    我正在使用 VS2008 TFS 带有 MSTest 我有一个可靠工作的单元测试 依赖于项目子文件夹中的数据文件 即 testproject1 TestData 数据文件属性为 构建操作 内容 始终复制 它本身不是测试数据文件 而是生产代码