问题标签 [foq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
f# - 你能在 foq 中设置递归模拟吗?
我会让用 Foq 模拟一个IBus。
上的方法之一IBus
是OpenPublishChannel
,它返回一个IPublishChannel。IPublishChannel 又具有Bus
返回 parent 的属性IBus
。
我当前的代码如下,但显然它没有编译,因为 mockBus 不是由我需要的点定义的。有没有一种方法可以设置这样的递归模拟,而无需创建两个接口的模拟?
f# - 在具有类型参数的接口上使用 Foq 验证方法匹配失败
我有这样的界面
我试着像这样嘲笑
我有这样的测试
该函数使用app.Create
调用。db.Set
Async.AwaitTask
这一切都很好,Foq 很棒。但是,验证会引发 system.exception。methodsMatch
Foq 中的函数返回 false,因为他expectedMethod
有一个ParameterInfo.ParameterType
ofSystem.Collections.Generic.IEnumerable``1[Result]
并且actual.Method
有一个ParameterInfo.ParameterType
of System.Collections.Generic.IEnumerable``1[T]
。
我尝试添加和删除类型参数无济于事。我需要接口中的类型参数(和任务),因为它是由 C# 中的其他人实现的。
这是generateAddInvocation
方法的问题还是我调用验证错误?
f# - 如何在 Foq 中设置一个返回异步的模拟?
我尝试使用
这导致NotSupportedException
在函数中被提升toCall
。
我应该如何在 Foq 中模拟异步?
是否支持?
unit-testing - 在 F# Foq 中模拟非标准事件
我是 F# 的新手,我正在通过一些练习来学习这门语言。我目前正在尝试做的是为自定义 Castle.Windsor 设施编写单元测试,并且我正在尝试模拟内核以引发“ComponentRegistered”事件。
我使用的工具是 FsUnit/xUnit/Foq。
我的代码:
错误信息:
错误 4 事件“ComponentRegistered”具有非标准类型。如果此事件是用另一种 CLI 语言声明的,您可能需要使用该事件的显式 add_ComponentRegistered 和 remove_ComponentRegistered 方法来访问此事件。如果此事件在 F# 中声明,则将事件类型设为“IDelegateEvent< >”或“IEvent< ,_>”的实例化。C:\Workbench\EvilDev\evildev.commons\Tests\EvilDev.Commons.Windsor.Tests\Auto Resolver Facility Specification.fs 35 53 EvilDev.Commons.Windsor.Tests
如何从 F# 模拟/触发此类事件?
unit-testing - Foq Mock.Expect with Times > 1 总是失败
除了 0 或 1(从不,一次)之外,Mock.Expect
我发现的所有示例都没有使用。Times
我修改了 Foq.Usage.fsx 中的一个现有测试,以尝试不是 0 或 1 的东西,但我无法让它工作。
有人看到有什么不对吗?
unit-testing - 在 F# 中使用 Foq 配置 C# 输出参数
我正在使用 F# 和 Foq 为 C# 项目编写单元测试。
我正在尝试设置一个接口的模拟,其方法有一个out
参数,我什至不知道如何开始。它可能与代码引用有关,但这就是我的理解结束的地方。
界面是这样的:
在 C# Foq 中,接口的用法如下所示:
至于如何用 F# 实现这一点,我完全迷失了。我尝试了一些类似的东西
这导致引用表达式带有下划线并带有错误消息
没有任何迹象表明 a 和 b 应该是什么类型,我不知道如何纠正这个问题。
:?>
(当我使用 时,它变得更加狂野open Foq.Linq
;然后错误列表窗口开始告诉我可能的重载与类似的东西Action<'TAbstract> -> ActionBuilder<'TAbstract>
,我什至迷路了......)
非常感谢任何帮助或解释!
编辑:
所以,正如这里所说,byref/out 参数不能在代码引用中使用。这可以在 F# 中设置吗?
ninject - 在 F# 中使用 Ninject 和模拟
这个问题是更大问题的一部分,可以在这里找到
在生产代码中,我们使用 Ninject 和构造函数注入,我们的服务看起来像这样
构造函数参数列表如何随着时间的推移而变化。这就是我们希望在测试中也使用 IoC 的原因。
在 C# NUnit 中这很容易,因为我们有 Ninject.MockingKernel,它总是提供模拟实现,并且在每个测试夹具中,我们只是重新绑定到它的实际实现。
如何在 F# xUnit 中实现相同的目标。
unit-testing - 使用 foq 测试接口
我正在尝试使用 Foq 来测试与 Foq 的接口。
到目前为止,我看到的所有例子都比较简单,例如:
示例来自“使用 F# 进行测试 - Mikael Lundin”
我还通过一些谷歌搜索对此进行了研究(此链接很有帮助 - http://trelford.com/blog/post/Foq.aspx)
但是,我要测试的真实接口如下:
我尝试了许多不同的方法来测试这些(例如,定义一个带有 int->string 签名的函数,用作设置的输入。或者,将返回值作为 string->DateTime 并将设置作为只是一个整数。
我的问题实际上如下:使用 Foq 测试接口时,如何将测试扩展到具有任何一般长度的函数签名的接口(例如 a->b->c->d->e 等)
.net - 将 Foq 与 F# 函数类型一起使用
我正在使用 F# 类型定义来防止我的函数之间的硬依赖,例如
输出 x:“4”
显然,这是非常人为和简单的,但想象一下依赖项是解析器和排序器或其他任何东西。我正在编写的更小的功能。
我正在尝试使用 Foq 来帮助我的单元测试装置。这是我正确使用 F# 的第一周,我很难弄清楚如何配置这些类型的模拟。
有两点值得一提:
1 - 如果我使用抽象类,我可以让它工作,但我不想这样做,因为它对于完全相同的最终结果要麻烦得多。例如
允许我设置一个模拟
但我真的不想这样做。
2 - 如果我只是使用
然后我得到一个有效的值,但是如果我尝试以任何方式配置它
或者
然后我得到一个例外
或者
我希望我只是对语法很愚蠢,并且可以做我想做的事。我已经尝试了我能想到的所有变体,包括 .Setup(conditions).Create() 的变体,但我在源代码中找不到任何示例。
我显然可以很容易地制作自己的模拟像
因为任何适合该 int -> int 签名的东西都是有效的,但是如果我想检查该函数是否传递了某个值,我必须放入一个日志记录步骤等。如果有就好了Foq 做了一些繁重的工作。
编辑 我刚刚注意到根 Mock 对象在其签名中具有“需要引用类型”(即 Mock<'TAbstract(requires reference type)> )——这是否意味着我没有机会模拟值?如果我不配置模拟,它如何管理它?