问题标签 [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.

0 投票
1 回答
202 浏览

f# - 你能在 foq 中设置递归模拟吗?

我会让用 Foq 模拟一个IBus

上的方法之一IBusOpenPublishChannel,它返回一个IPublishChannel。IPublishChannel 又具有Bus返回 parent 的属性IBus

我当前的代码如下,但显然它没有编译,因为 mockBus 不是由我需要的点定义的。有没有一种方法可以设置这样的递归模拟,而无需创建两个接口的模拟?

0 投票
1 回答
267 浏览

f# - 在具有类型参数的接口上使用 Foq 验证方法匹配失败

我有这样的界面

我试着像这样嘲笑

我有这样的测试

该函数使用app.Create调用。db.SetAsync.AwaitTask

这一切都很好,Foq 很棒。但是,验证会引发 system.exception。methodsMatchFoq 中的函数返回 false,因为他expectedMethod有一个ParameterInfo.ParameterTypeofSystem.Collections.Generic.IEnumerable``1[Result]并且actual.Method有一个ParameterInfo.ParameterTypeof System.Collections.Generic.IEnumerable``1[T]

我尝试添加和删除类型参数无济于事。我需要接口中的类型参数(和任务),因为它是由 C# 中的其他人实现的。

这是generateAddInvocation方法的问题还是我调用验证错误?

0 投票
1 回答
166 浏览

f# - 如何在 Foq 中设置一个返回异步的模拟?

我尝试使用

这导致NotSupportedException在函数中被提升toCall

我应该如何在 Foq 中模拟异步?

是否支持?

0 投票
1 回答
243 浏览

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# 模拟/触发此类事件?

0 投票
3 回答
202 浏览

unit-testing - Foq Mock.Expect with Times > 1 总是失败

除了 0 或 1(从不,一次)之外,Mock.Expect我发现的所有示例都没有使用。Times我修改了 Foq.Usage.fsx 中的一个现有测试,以尝试不是 0 或 1 的东西,但我无法让它工作。

有人看到有什么不对吗?

0 投票
1 回答
279 浏览

unit-testing - 在 F# 中使用 Foq 配置 C# 输出参数

我正在使用 F# 和 Foq 为 C# 项目编写单元测试。

我正在尝试设置一个接口的模拟,其方法有一个out参数,我什至不知道如何开始。它可能与代码引用有关,但这就是我的理解结束的地方。

界面是这样的:

在 C# Foq 中,接口的用法如下所示:

至于如何用 F# 实现这一点,我完全迷失了。我尝试了一些类似的东西

这导致引用表达式带有下划线并带有错误消息

没有任何迹象表明 a 和 b 应该是什么类型,我不知道如何纠正这个问题。

:?>

(当我使用 时,它变得更加狂野open Foq.Linq;然后错误列表窗口开始告诉我可能的重载与类似的东西Action<'TAbstract> -> ActionBuilder<'TAbstract>,我什至迷路了......)

非常感谢任何帮助或解释!

编辑:

所以,正如这里所说,byref/out 参数不能在代码引用中使用。这可以在 F# 中设置吗?

0 投票
1 回答
704 浏览

c# - 使用 Foq 模拟具有显式实现接口的类

我想DbSet使用Foq模拟一个实体框架。它类似于:

我尝试在某些地方强制和强制转换xIQueryable但这不起作用。

正如您在文档中看到DbSet的那样,它确实通过实现IQueryable接口DbQuery,但通过“显式”实现属性来实现。

Moq中有一个函数As,因此您可以告诉它将其视为IQueryable如下所示:

0 投票
0 回答
98 浏览

ninject - 在 F# 中使用 Ninject 和模拟

这个问题是更大问题的一部分,可以在这里找到

在生产代码中,我们使用 Ninject 和构造函数注入,我们的服务看起来像这样

构造函数参数列表如何随着时间的推移而变化。这就是我们希望在测试中也使用 IoC 的原因。

在 C# NUnit 中这很容易,因为我们有 Ninject.MockingKernel,它总是提供模拟实现,并且在每个测试夹具中,我们只是重新绑定到它的实际实现。

如何在 F# xUnit 中实现相同的目标。

0 投票
1 回答
226 浏览

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 等)

0 投票
1 回答
744 浏览

.net - 将 Foq 与 F# 函数类型一起使用

我正在使用 F# 类型定义来防止我的函数之间的硬依赖,例如

输出 x:“4”

显然,这是非常人为和简单的,但想象一下依赖项是解析器和排序器或其他任何东西。我正在编写的更小的功能。

我正在尝试使用 Foq 来帮助我的单元测试装置。这是我正确使用 F# 的第一周,我很难弄清楚如何配置这些类型的模拟。

有两点值得一提:

1 - 如果我使用抽象类,我可以让它工作,但我不想这样做,因为它对于完全相同的最终结果要麻烦得多。例如

允许我设置一个模拟

但我真的不想这样做。

2 - 如果我只是使用

然后我得到一个有效的值,但是如果我尝试以任何方式配置它

或者

然后我得到一个例外

或者

我希望我只是对语法很愚蠢,并且可以做我想做的事。我已经尝试了我能想到的所有变体,包括 .Setup(conditions).Create() 的变体,但我在源代码中找不到任何示例。

我显然可以很容易地制作自己的模拟像

因为任何适合该 int -> int 签名的东西都是有效的,但是如果我想检查该函数是否传递了某个值,我必须放入一个日志记录步骤等。如果有就好了Foq 做了一些繁重的工作。

编辑 我刚刚注意到根 Mock 对象在其签名中具有“需要引用类型”(即 Mock<'TAbstract(requires reference type)> )——这是否意味着我没有机会模拟值?如果我不配置模拟,它如何管理它?