如何使用 Moq 库创建 SerialPort 模拟?

2023-12-24

我必须编写大量处理串行端口的代码。通常,电线的另一端会连接一个设备,我通常会创建自己的模拟来模拟它们的行为。

我开始考虑 Moq 来帮助我进行单元测试。当您只需要一个存根时,使用它非常简单,但我想知道是否可能,如果可以,如何为硬件设备创建一个模拟,该模拟根据我想要测试的内容做出不同的响应。

一个简单的例子:

我连接的设备之一接收命令(移动到位置 x),返回 ACK 消息并进入“移动”状态,直到到达指定位置。

我想创建一个测试,在其中发送移动命令,然后继续查询状态,直到到达最终位置。

我想为两个不同的测试创建两个版本的模拟,一个是我希望设备成功到达最终位置,另一个是失败。

要问的问题太多了?


如果您的程序中有串行端口对象的接口,那么 Moq 可以通过创建模拟串行端口对象来实现这一点(Moq 对于任何复杂性的存根和模拟都有好处)。

如果你愿意截距呼叫 BCLSerialPort在它们到达硬件之前类(无需创建串行端口接口和实现,以及测试实现),那么您需要更强大的东西。就是这样Moles http://research.microsoft.com/en-us/projects/moles/ is for.

如果您想实际模拟设备,那么这超出了“单元测试”的范围。在此级别,可以使用com0com http://com0com.sourceforge.net/添加一对虚拟串行端口并为您的设备编写一个模拟器,以便您的测试可以与之对话。在这个级别,自动化测试要复杂得多(尽管并非不可能)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Moq 库创建 SerialPort 模拟? 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li

随机推荐

  • 将 HTML 元素放入原型链中?

    我想创建一个对象 通过将元素放入对象的原型链中来扩展 HTML 元素的功能 我想我可以用如下的方法来做到这一点 var el document createElement div el innerHTML foo var wrapper O
  • 将变量从一个 POJO 复制到另一个 POJO

    我有一个 POJO A 它有 30 多个变量 我有另一个 POJO B 大多数变量与 A 中的相同 例如 A 有一个变量 var1 作为 LocalDate 列表 B 有一个同名 var1 的属性 但作为 Long 列表 长日期值 现在 我
  • 获取字体中的所有可用字符

    我正在使用 Swift 3 开发 iOS 应用程序 在此应用程序中 我列出了所有可用的字体 系统提供 但我也想列出它们的所有可用字符 例如 我正在使用 Font Awesome 我希望用户能够从列表中选择任何字符 符号 我怎样才能做到这一点
  • 通过环境变量指定 @CrossOrigin 来源

    是否可以指定来源 CrossOrigin通过环境变量进行注释 我想这样做 以便我可以使用相同的代码库进行 uat staging 生产 我希望我的 uat staging 环境可以通过 localhost 访问进行测试 但我的生产环境只接受
  • (为什么).Net 中的反射如此昂贵? [复制]

    这个问题在这里已经有答案了 可能的重复 反思的 成本 是多少 https stackoverflow com questions 224232 what is the cost of reflection 有没有人对普遍接受的口头禅有一个很
  • Node js:libuv 线程池如何工作?

    我正在学习 Node Js 我了解 Node js 的核心是基于事件循环的反应器模式 当任何事件发生时 它都会进入事件队列 然后在运行任务结束后被堆栈拾取 如果事件是非阻塞事件 则会发生这种情况 但如果它是阻塞请求 则事件循环将其传递给来自
  • 如何使用复选框在 mySQL 中输入 true (1) 或 false (0) 并在 php / html 表单中显示为选中状态?

    我有一个带有字段名称的表Shift Trig这意味着有一个true or false以 a 的形式输入的值1 or 0 我有一个 html 表单 每行都有一个复选框 选中时应输入1进入现场 我还希望该复选框能够反映存储在中的当前值Shift
  • 删除 Three.js 中相邻的面

    我正在尝试优化一个场景 其中我根据图像的像素数据渲染立方体 http jsfiddle net majman 4sukB http jsfiddle net majman 4sukB 该代码只是检查图像中的每个像素并相应地创建和定位立方体网
  • 如何将程序加载到内存中与预期地址不同的地址?

    通常 用户程序二进制文件将加载到低地址 通常约为0x400000 在程序地址空间中 该空间将在elf二进制 对于 Linux 我们能否强制用户二进制文件加载到高地址 可能在2GB地址范围 其中libc或加载其他此类库 我尝试在网上寻找解决方
  • 创建 CSS Sprite :hover 滚动图像链接

    我有一个问题希望能得到答案 我正在尝试从头开始创建一个网站 不使用 Dreamweaver Expression Web 等 我只使用记事本 我想要完成的是在标签内创建两个导航链接作为翻转 CSS 精灵图像 使用伪类元素 hover 我稍后
  • mex 将向量从 c++ 从 mex 函数传输到 matlab

    我试图通过用 C 编写一些函数并使用 mex 接口来集成它们来加速我的 Matlab 程序 我在 C 向量中得到了结果 我想将它转移到 MATLAB 中的数组 我知道我应该重定向 plhs 0 to the vector 当我完成类似的事情
  • 如何在tensorflow中读取.mat文件格式?

    Tensorflow 中的 Reader 共有三个版本 tf TFRecordReader 用于读取TFRecord文件 tf FixedLengthRecordReader 用于读取二进制文件 tf TextLineReader 用于读取
  • Qt Creator - 如何启用浮动 IDE 布局?

    我是长期用户内河码头 C Builder窥视Qt创建者 版本 4 4 0 目前看来非常适合所有类型的 C 开发任务 因此可能非常高效 不幸的是有一个major与相比 缺点显着减慢了我的速度C Builder 我找不到任何可以重新排列的设置Q
  • SearchControls.setTimeLimit() 是否处理读取超时?

    我遇到一个问题LdapContext search 针对目录有时会永远挂起 我尝试提供一个SearchControls我调用的对象setTimeLimit 10000 但问题仍然发生 鉴于此 我现在的想法是 SearchControls 对
  • UNIX 僵尸和守护进程

    据我所知 当进程不能很好地清理 其资源没有被回收 收获 时 就会创建僵尸 调用 fork 创建新进程后 父进程应始终对该进程调用 waitpid 来清理它 我还了解到 守护进程是通过分叉一个本身由 fork 创建的子进程 然后让该子进程死亡
  • 如何通过拨动开关应用设置? [复制]

    这个问题在这里已经有答案了 可能的重复 谁能告诉我如何使用开关 https stackoverflow com questions 5639372 can anyone tell me how to use switch 嗨 我有两个视图
  • CSS线性渐变不准确?

    对于我的应用程序 我希望制作一个可以提供 0 度到 360 度之间任何色调的调色板 我目前正在使用此代码来制作调色板 我们以色调 120 纯绿色 为例 function drawPalette hue var ctx document qu
  • 领域驱动设计和实体框架 4.1(代码优先)

    我目前正在学习领域驱动设计开发方法 并使用 Tim McCarthy 编写的 NET 领域驱动设计与 C 一书作为指南 这本书确实很有帮助 但在使用实体框架时我变得有点困惑 特别是 4 1 中提供的代码优先方法 根据书中的示例 分层架构方法
  • 从包含合并单元格的表格中删除范围

    基本上 我想要完成的是 删除表中从光标在表中的位置到表末尾的所有行 问题是该表包含垂直合并的单元格 因此当我尝试执行以下操作时 For i Selection Tables 1 Rows Count To Selection Cells 1
  • 如何使用 Moq 库创建 SerialPort 模拟?

    我必须编写大量处理串行端口的代码 通常 电线的另一端会连接一个设备 我通常会创建自己的模拟来模拟它们的行为 我开始考虑 Moq 来帮助我进行单元测试 当您只需要一个存根时 使用它非常简单 但我想知道是否可能 如果可以 如何为硬件设备创建一个