在 F# Foq 中模拟非标准事件

2024-02-24

我是 F# 新手,我正在通过一些练习来学习这门语言。我目前正在尝试做的是为自定义 Castle.Windsor 设施编写单元测试,并且我正在尝试模拟内核以引发“ComponentRegistered”事件。

我使用的工具是 FsUnit/xUnit/Foq。

My Code:

let event = Event<_,_>()

let kernel = Mock<IKernel>()
    .SetupEvent(fun k -> <@ k.ComponentRegistered @>)
    .Publishes(event.Publish)
    .Create()

错误信息:

错误 4 事件“ComponentRegistered”具有非标准类型。如果 此事件是用另一种 CLI 语言声明的,您可能需要访问 此事件使用显式 add_ComponentRegistered 和 事件的remove_ComponentRegistered 方法。如果这个事件是 在 F# 中声明,使事件类型成为以下任一类型的实例 'IDelegateEvent>' 或 'I事件,_>'。 C:\Workbench\EvilDev\evildev.commons\Tests\EvilDev.Commons.Windsor.Tests\Auto 解析器设施规范.fs 35 53 EvilDev.Commons.Windsor.Tests

如何从 F# 模拟/触发此类事件?


这种类型的事件可以使用指定委托事件 http://msdn.microsoft.com/en-us/library/ee370450.aspx:

let event = DelegateEvent<ComponentDataDelegate>()
let kernel = 
    Mock<IKernel>()
        .SetupEventByName("ComponentRegistered")            
        .Publishes(event.Publish)
        .Create()    
kernel.add_ComponentRegistered(fun _ _ -> 
    printf "Bingo"
)
event.Trigger([|"x";Mock.Of<IHandler>()|])

可以使用以下方法通过反射发现事件的添加和删除处理程序类型.GetEvent http://msdn.microsoft.com/en-us/library/w7k6k1z6%28v=vs.110%29.aspx method.

我扩展了 Foq API 以允许按名称指定事件,以便您可以指定事件名称(无类型)来解决非标准事件类型编译器错误。

The 变更集 https://foq.codeplex.com/SourceControl/changeset/475613a0810b添加新的SetupEventByName 方法已提交。如果您现在需要这个,您可以从源代码构建或简单地添加最新的Foq.fs https://foq.codeplex.com/SourceControl/latest#Foq/Foq.fs到你的项目。该功能将出现在 Foq 1.5 中,我将在第二天左右尝试推送。

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

在 F# Foq 中模拟非标准事件 的相关文章

  • 函数式编程是否避免了状态?

    根据维基百科 http en wikipedia org wiki Functional programming 函数式编程是一种编程范式 它将计算视为数学函数的评估避免状态和可变数据 强调我的 这是真的吗 我个人的理解是 它使状态更加明确
  • 支持链接方法的模拟对象

    我想知道是否有一种相当简洁的方法来模拟支持方法链接的对象 例如 数据库查询对象可能有一个如下所示的方法调用 result database gt select my table gt where array my field gt a va
  • 如何测试 Flask 开发服务器是否已启动?

    我的 Flask 应用程序上有一个测试装置 它启动开发服务器来测试一些用户交互 对于第一个测试 我想确保服务器已启动 一般而言 无需测试特定响应代码 执行此操作的最佳方法是什么 我希望我能用self assertTrue response
  • Python 单元测试 Google Bigquery

    我在对以下代码块进行单元测试时遇到问题 from google cloud import bigquery from google oauth2 import service account def run query query gcp
  • 单元测试中的多个断言[重复]

    这个问题在这里已经有答案了 我刚刚读完 Roy Osherove 的 单元测试的艺术 我正在努力遵循他在书中提出的最佳实践 最佳实践之一是不要在测试方法中使用多个断言 这条规则的原因对我来说相当清楚 但它让我想知道 如果我有这样的方法 pu
  • 让 PHPUnit 忽略一些事情?

    我有一个 PHPUnit 测试类 我希望在测试运行中忽略它 我知道我可以通过重命名它来做到这一点 以便它的文件名中不包含 测试 一词 但我不想这样做 因为它比我想要的更混乱了源代码控制水域 有人有建议吗 有几个选项phpunit命令可以帮助
  • 测试 Spring 端点时如何防止 NestedServletException?

    我在尝试着测试安全配置我的一些端点受到保护 PreAuthorize oauth2 hasScope scope 当使用不具有所需范围的访问令牌通过 Postman 访问此类端点时 将返回以下内容并带有 HTTP 状态代码 403 禁止 e
  • PHPUnit - 使用配置文件时“未执行测试”

    问题 为了提高代码质量 我决定尝试学习如何使用单元测试来测试我的代码 而不是使用平庸的最佳测试解决方案 我决定使用 Composer 安装 PHPUnit 作为个人库 它可以让我实现常见的数据库功能 起初我没有 PHPUnit 的配置文件
  • CSV 提供的数据源第一列中存在奇数字符

    我有一个 CSV 文件 已添加到 Visual Studio 单元测试项目中 它有七列 如下所示 assessmentitemid reviewer1 reviewer2 reviewer3 reviewer4 reviewer5 revi
  • Grails 控制器单元测试不会将页面渲染到response.text

    我的环境配置 Java 1 7u51 Grails 2 3 7 我试图断言response text在控制器测试中但它总是带 发生了什么 这是我的用户控制器 class UserController def index flash erro
  • 如何模拟 typeorm 连接

    在集成测试中 我使用以下代码片段来创建连接 import Connection createConnection from typeorm ts ignore import options from ormconfig js export
  • 使用原始类型模拟案例类

    考虑以下类型结构 trait HasId T def id T case class Entity id Long extends HasId Long 比方说 我们想在一些测试中模拟实体类 val entityMock mock Enti
  • int -> int list 与类型 int -> IEnumerable<'a> 不兼容

    Given open System Linq 这是一个可以接受的表达方式 2 3 4 SelectMany fun n gt 1 n 但这不是 2 3 4 SelectMany fun n gt 1 n 错误消息显示 int gt int
  • 如何运行传递给模拟方法的 lambda 函数?

    我想知道是否可以运行作为参数传递给模拟函数的 lambda 函数 并在调用模拟方法时运行它 我正在使用 Mockk 我想象代码是这样的 class DataManager fun submit lambda Int gt Unit val
  • 一个单元在哪一级测试无锁代码?

    Can LLVM https packages debian org stretch llvm QEMU https packages debian org stretch qemu kvm GDB https packages debia
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • 如何在 F# 中实现返回 void 的接口成员

    想象一下 C 中的以下接口 interface IFoo void Bar 我如何在 F 中实现这一点 我在 30 分钟的在线搜索中找到的所有示例都仅显示具有返回类型的示例 我认为这在函数式风格中更常见 但在这种情况下我无法避免 这是我到目
  • 使用 typescript、karma 和 jasmine 进行 RxJS Observable.timer 单元测试

    大家好 我对 Angular2 Karma 和 Jasmine 还比较陌生 目前我正在使用 Angular 2 RC4 Jasmine 2 4 x 我有一个 Angular 2 服务 它定期调用 http 服务 如下所示 getDataFr
  • 工作流程系统中的单元/自动化测试

    您是否对像 K2 这样的复杂工作流程系统进行自动化测试 我们正在构建一个在 Sharepoint 2007 和 K2 之间进行广泛集成的系统 我什至无法想象从哪里开始自动化测试 因为工作流程涉及多个用户与 Sharepoint K2 工作流
  • F#:仅对第一个事件执行一次操作,没有可变性/锁定?

    我有这段代码 可以下载文件并在控制台中告诉我该文件有多大 use webClient new WebClient let lockObj new Object let mutable firstProgressEvent true let

随机推荐

  • Rails 不转换时区 (PostgreSQL)

    我对时区和 postgresql 数据库 Rails 3 0 4 PostgreSQL 9 0 有问题 我正在使用自定义范围 在其中附加一些条件 执行连接等 问题是 Rails 不会将时间转换为我的本地时区 这是范围的代码 scope wi
  • VBscript删除子文件夹

    我对 vb 脚本非常陌生 我需要一个脚本来根据起始名称 SA 和 2 天前删除几个三级子文件夹 example C abc user1 temp SA123 c abc user2 temp SA2345 c abc user3 temp
  • 如何在 VS Code 编辑器中按标题级别更改 Markdown 标题颜色?

    我的问题类似于但那里给出的答案是针对 Vim 的 我需要一个针对 VS Code 的答案 我是一个真正的新手 我尝试自己解决这个问题 但这些尝试失败了 Markdown 预览 GitHub 样式 https github com mjbvz
  • 如何复制克隆 UIElement 并保留布局/渲染信息?

    我想复制一个复杂的数据绑定UIElement但保留原始 UIElement 中的绑定 布局和渲染信息 创建一个新的UIElement似乎效率低下 因为我必须执行另一个完整的绑定 测量 排列 渲染过程 到目前为止我最接近的是创建一个新的Dra
  • 对于上下文无关语法,如何将其转换为等效的下推自动机?

    对于 0 1 2 上的上下文无关文法 G 起始变量为 S S 0S0 1S1 2S2 是是 22 我如何将其变成等效的下推自动机 下推自动机可以将符号推入堆栈顶部并将其弹出 它还可以将其转换基于最顶层的堆栈符号 我们需要考虑一种机制 允许我
  • 通过 USB 模拟 UART

    有谁知道是否可以通过 USB 模拟 UART 简单串行发送和接收 这将如何实现 我在 Microchip 网站上找到了这个链接 但不是很容易找到 http www microchip com forums m522571 print asp
  • PassportJS 自定义身份验证回调未调用

    更新 以下错误已修复a commit https github com jaredhanson passport issues 186 我已将第一个答案标记为 正确 尽管该提交在其中一条评论中引起了我的注意 我希望利用自定义回调来处理 Pa
  • 使用 .htaccess 删除 .php 扩展名

    是的 我已经阅读了 Apache 手册并在这里进行了搜索 由于某种原因 我根本无法让它发挥作用 我最接近的是让它删除扩展名 但它指向根目录 我希望它只在包含以下内容的目录中工作 htaccess file 我需要做三件事 htaccess
  • javax.net.ssl.SSLHandshakeException:在 bigquery 中插入行时,远程主机在握手期间关闭了连接

    您好 我正在开发 Android 应用程序 其中集成了 bigquery 我发现有时我们在将数据插入大型查询表时会遇到很多 SSL 异常 我不知道该如何处理这件事 请帮忙看看这个问题的具体原因是什么 这是相同的主题 但没有答案进行流式插入
  • 如何简洁地创建一个以字母为键的字典?

    我创建了一个包含 26 个字母的字典 如下所示 aDict a 1 b 2 c 3 d 4 etc 我正在努力让我的代码变得更好 我的问题是 有没有更短的方法可以做到这一点而无需输入所有这些数字 您可以使用string ascii lowe
  • AngularJS 和 Angular-UI Bootstrap 选项卡范围

    我正在使用 AngularJS 和 Angular UI Bootstrap 选项卡 这是我的控制器 app controller SettingsCtrl scope SettingsFactory stateParams functio
  • 在 pandas 的数据框中创建一个组

    我有一个清单 例如 groups Group1 A B Group2 C D 和一个数据框 例如 A 100 B 200 C 300 D 400 我想将上面列表中的一组总和变为 Group 1 300 Group 2 700 我如何使用 p
  • 列表视图项目点击不起作用

    我的 ListView 中有一个 ListView 显示 ImageButton 我将 focusalble false 和 focusableInTouchMode false 设置为 ImageButton 我设置了ListView O
  • 使用 urllib3 进行多部分表单编码和发布

    我正在尝试上传csv文件至 不过 我遇到了一些问题 我think它源于不正确的mimetype 或许 我正在尝试通过以下方式手动发布文件urllib2 所以我的代码如下所示 import urllib import urllib2 impo
  • Android相机使用双指触摸预览缩放

    我正在尝试在相机预览模式下使用双指触摸手势进行缩放 但我无法做到这一点 我已经在 ImageView 上完成了 Zoom 控制 并且工作正常 现在我想在相机预览模式下执行此操作 即当我们启动相机时 我们可以使用双指手势进行缩放 下面我添加了
  • 如何清除SQL Server扩展事件事件文件

    如何清除SQL Server扩展事件存储在文件中 背景 SQL Server 扩展事件事件文件目标的文件存储在哪里 我想删除几个月的日志文件 但 SQL Server 没有告诉我这些文件在哪里 我会遵循 Microsoft SQL Serv
  • 我如何告诉 Sinatra 它是什么环境(开发、测试、生产)?

    免责声明 在 Heroku 上部署 Sinatra 的新手 我见过http www sinatrarb com configuration html http www sinatrarb com configuration html它告诉我
  • 将 WTForms 的 populate_obj( ) 方法与 Flask 微框架结合使用

    我有一个允许用户编辑其用户信息的模板
  • 在 iPhone SDK 中检测视网膜屏幕/iPhone 4

    在我的应用程序中 我从网络 准确地说是从我的服务器 下载一些图像 为了节省一些带宽 特别是手机上的内存 我以两种分辨率提供它们 旧 iPhone系列的480x320和对于配备视网膜显示屏的 iPhone 4 分辨率为 960x640 现在
  • 在 F# Foq 中模拟非标准事件

    我是 F 新手 我正在通过一些练习来学习这门语言 我目前正在尝试做的是为自定义 Castle Windsor 设施编写单元测试 并且我正在尝试模拟内核以引发 ComponentRegistered 事件 我使用的工具是 FsUnit xUn