问题标签 [fsunit]

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 回答
563 浏览

f# - 如何为 FsUnit 提供有用的断言失败消息?

我正在使用 FsUnit 2.3.2,但我对失败消息不满意。请参阅以下示例:

...给了我不太有用的信息:

预期和实际都是 Microsoft.FSharp.Collections.FSharpList`1[System.Int32]

在 FsUnit.TopLevelOperators.should[a,a](FSharpFunc`2 f, ax, Object y) in d:\GitHub\FsUnit\src\FsUnit.NUnit\FsUnit.fs:line 44 at Program.test 1() in F:\work\playground\fsunit\fsunit\Program.fs:第 9 行

我发现的一种解决方法是使用数组而不是列表:

...产生

预期和实际都是 System.Int32[2]
索引 [1] 处的值不同
预期:2
但原为:4

第二个问题是我是否定义了 ADT

...给我的信息:

预期:Program+MyT+B
但原为:Program+MyT+A

...我可以通过为 MyT 实现 ToString 来解决这个问题:

...这将带来一个好消息:

预期:B(abc)
但是是:A(10)

...但我希望 fsunit 以 (sprintf "%A") 的方式呈现 MyT 值。

无论如何,不​​得不做这些变通办法是不行的。

如何在不使用数组的情况下获取 F# 列表的有用消息?

如何获取对 ADT 有用的消息?

上述问题是否有很好的解决方案,还是我应该放弃 FsUnit?

对于没有这些问题的 F# 单元测试库,您有更好的建议吗?

0 投票
1 回答
71 浏览

inheritance - 对象表达式和错误 FS0419:“基本”值只能用于直接调用被覆盖成员的基本实现

标题中的错误含糊不清,但谷歌搜索它目前在 SO 上有两次点击,总共有五次点击(表明它是一种罕见的野兽,所以不要指望这里有太多的访问;)。我希望这个问题在该列表中排名第六:p。

Kvb 在此线程中的回答表明错误文本具有误导性,如果您从闭包内调用 base 则会引发错误文本,但情况并非总是如此,因为它有效:

但这失败了(我发现的最简单的例子来说明这个问题):

我使用对象表达式而不是具有继承的类型声明,并且我尝试通过构建自定义 NUnit 约束来创建新的 FsUnit 约束。这是一个简化版本,显示了我看到的问题:

现在,显然不需要知道 FsUnit 就能看到这种行为。但是我花了一夜和一天的时间才意识到我被骗了,事实上,直到我在 SO 上写这个问题时我才看到它。

事实证明这是有效的:

而不是x |> base.SomeMethodbase.SomeMethod x

我觉得这很令人惊讶。不确定这是错误还是功能。但是由于|>运算符是内联的(我用不同的运算符对其进行了测试)并且它没有创建新函数(就像>>那样),所以我不明白为什么会引发这个错误。

事实上,我没有看到f a和之间的任何语义差异a |> f(除了优先规则等)。那么为什么会出错呢?我违反了什么规则?


最后一个想法,kvb 写道“base不能从闭包中调用......咖喱成员自动创建一个闭包”,这表明这是错误的,但它编译得很好:

有谁知道究竟是什么原因导致或不导致这个错误?

0 投票
0 回答
203 浏览

f# - FsUnit.xUnit FSharp.Core 和 xunit.assert 程序集绑定

我正在使用 F# 迈出第一步,并使用 FsUnit.xUnit 进行测试。在 Visual Studio 2017 中,我设置了一个全新的 F# 项目并添加了一个测试项目。到测试项目我 NuGet FsUnit.xUnit 3.0.0 然后 NuGet FsUnit.xUnit.Sample。一切都建立起来。然后测试失败

在阅读了FsUnit 主页FsUnit 问题后,我添加了一个app.configwith

由于 FSharp.Core.dllbin/debug是 4.4.1.0 版。

再次运行测试给出

所以我添加另一个重定向app.config如下

版本 2.2.0.0 是我在 中找到的 xunit.assert 版本bin\debug

测试再次失败。这次与

测试项目详细信息:目标 F# 运行时:4.4.1.0

目标框架:4.6.2

我究竟做错了什么?这是一个配置问题,还是我遗漏了什么阻止 FsUnit.xUnit 运行测试?

0 投票
1 回答
198 浏览

unit-testing - 如何在 f# 中为模式匹配创建 fsunit 测试?

我是 f# 和 fsUnit 的新手,我想知道如何使用 fsUnit 测试模式匹配语句。例如,如果我有以下代码,您将如何为其编写 fsunit 测试?

0 投票
1 回答
328 浏览

f# - 使用 FsUnit.Xunit 断言异常消息

我正在尝试使用 FsUnit.Xunit 断言某种异常类型和消息。throwWithMessageFsUnit 附带了一些功能。但是,当使用它而不是throw函数 fsc 时会发出以下错误:

这是无法编译的测试:

我不确定这里有什么问题。

版本:

  • FsUnit/FsUnit.Xunit 3.1.0
  • Nhamcrest(由 FsUnit.Xunit 引用)2.0.1
  • Xunit 2.3.1
0 投票
0 回答
49 浏览

unit-testing - Fsunit 返回运行时生成的实际值

我们正在使用 F# 进行 HTTP 调用自动化测试,我偶然发现了一个来自 FsUnit 的运行时错误,我不确定我是否理解,我承认我一生中只写过两次 F#,因此这可能是一个愚蠢的问题,但请耐心等待。

这是测试:

这是错误消息:

消息:预期:真但是是: << StartupCode$SBTech-BetsReportingAPI-AutomationTests>.$HttpApiTests+expectedIsAlive@1689>

我可以猜测这是一些运行时生成的字符串,但我不确定是什么原因。

0 投票
1 回答
208 浏览

f# - 在 F# 测试中模拟 `printfn`

我正在尝试为我正在编写的一个小库编写一个测试(基本上)只是记录到控制台。

有没有办法像 F# 这样模拟函数?

示例:在 src/Lib/Lib.fs

然后,在 test/LibTest/Lib.fs

注意:我知道当前print返回unit- 我正在寻找一种方法来断言传递给的内容printfn(或者,更理想的是,发送给 stdout 的内容,它较少依赖于实现)。

我试过直接分配一个模拟函数Printf.printfn无​​济于事(显然,当我想到它时)。是否可以将输出捕获到控制台?或者模拟printfn函数(这是一个实现细节,但我可以接受)。

0 投票
1 回答
117 浏览

f# - F# - 如何使用 fsunit 测试构造函数中引发的异常?

我想检查传递给类型构造函数的参数是否有效。如果无效 ,我会检查它并引发ArgumentException 。 我想为此行为创建一个测试。我想使用Assert.throws或者最好是 FSUnit而不是 try/with 块。

// 测试

0 投票
1 回答
38 浏览

f# - 无法使用具有 3 个不同功能的 TestCase

我正在对使用不同方式(使用 NUnit 和 FsUnit)制作相同内容的三个函数进行测试。我想使用 TestCase 所以我不必复制/粘贴很多代码。我将此作为编译错误消息:“这不是有效的常量表达式或自定义属性值”。有没有办法解决这个问题?

程序.fs

测试.fs

0 投票
1 回答
71 浏览

f# - 如何使用 FsUnit.Xunit 测试“不应包含”?

正在尝试使用FsUnit.Xunit.

我也尝试过使用not'.

我该怎么写这个?