问题标签 [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 投票
2 回答
149 浏览

f# - fsunit 中的范围和缩进

我似乎无法在我的 fsunit 测试中获得正确的缩进。我一直被告知要使用 ML 风格的“使用 let ... in”,但这样做意味着编译器无法读取下一个测试的名称。有什么建议么 ?

0 投票
2 回答
2496 浏览

f# - 如何使用 FsUnit 正确测试异常

我试图弄清楚如何使用 FsUnit 正确测试异常。官方文档指出,要测试异常,我必须纠正这样的事情:

但是,如果我没有用[<ExpectedException>]属性标记我的测试方法,它总是会失败。听起来很合理,因为如果我们想测试异常,我们必须在 C# + NUnit 中添加这样的属性。

但是,只要我添加了这个属性,不管我试图抛出什么样的异常,它都会被处理。

一些片段:我的 LogicModule.fs

我的 LogicModuleTest.fs

0 投票
4 回答
2790 浏览

f# - 如何检查与 FsUnit 的歧视性工会的情况?

我想检查一个值是否属于受歧视联合的特定情况,而不必检查任何包含的数据。我的动机是每个单元测试只测试一件事。

一个例子如下(最后两行给出编译错误):

这可以在 FsUnit 中完成吗?

我知道这个答案,但不想为每种情况编写匹配函数(在我的真实代码中,有两个以上)。

0 投票
1 回答
132 浏览

unit-testing - 如何在 Linux 上使用 Mono 设置 FsUnit?

没有 Visual Studio,我就无法使用 NuGet。如何设置项目以手动使用 FsUnit?

0 投票
1 回答
220 浏览

unit-testing - FsUnit - 值或构造函数“应该”未定义

好的,我正在寻找 FsUnit 来开发一些 F# 代码的测试,并且我正在查看GitHub 上的示例 BowlingGame.fsx 。

参加第一次测试:

由于编译器错误,我得到了一个红色波浪线:

有什么建议么?

编辑:下面添加了完整的源代码。

0 投票
1 回答
540 浏览

f# - 将 TestCase 与 fsunit 一起使用

我一直在尝试使用 fsunit 来测试一个项目。如果我将自己限制在[<TestMethod>]方法上,它们都会出现在 TestExplorer 中。但是,如果我尝试不使用[<TestCase(...)>]任何东西,也不会执行任何测试。

我希望我的设置有问题,但我不知道它可能是什么。我的代码中引用了 NUnit.Framework 和 FsUnit。

这是使用 Visual Studio 2013,顺便说一句。

我正在尝试做的一个例子(使用玩具阶乘函数):

我尝试过替换TestFixtureTestClass但这似乎也没有任何好处。

标记

0 投票
1 回答
405 浏览

f# - 构造函数中的 fsunit.xunit 测试异常

我正在尝试使用 FsUnit + xUnit 测试此异常:

但是当它运行时我看到XUnit.MatchException。我做错了什么?

  1. 测试源代码
  2. 类别类型源代码
0 投票
2 回答
872 浏览

f# - FsUnit `should equal` 在 `Some []` 上失败

当我使用 NUnit 2.6.3 运行这个 FsUnit 测试时,

我得到:

即使消息中的 Expected 和 Actual 相同,测试也会失败。发生了什么?

0 投票
1 回答
592 浏览

unit-testing - F# 和 NUnit:测试失败时记录类型的结构化输出

我正在使用 NUnit 在 Visual Studio 2013 中使用 Resharper 的测试运行程序对 F# 代码进行单元测试。我在返回这些类型实例的项目和函数中有几个 F# 记录和区分联合类型,例如:

现在,当我编写如下测试用例(使用 FSUnit)时:

我收到一条非常无用的输出消息,类似于“预期:MyNamespace.MyRecord 但发现:MyNamespace.MyRecord”。

问题当然是 N​​Unit 显然用于object.ToString()生成输出消息,而我希望使用它sprintf "%A" object来生成更有用的输出消息,例如“预期:{ A = 77; B = 99} 但发现:{ A = 4; B = 7}”。

我知道我可以覆盖ToString所有记录和区分联合类型,如下所示:

但是,这会使类型定义变得混乱,其中包含仅用于测试目的的代码,并且在将此代码复制并粘贴到所有类型定义时有点违反不要重复自己的原则。另请注意,在 F# 3.1 中不推荐在类型扩充中添加覆盖成员。

老问题

所以,问题是:有没有办法在不显式覆盖的情况下为失败的 NUnit 测试获取结构化输出ToString?NUnit 有一些插件机制吗?我检查了 NUnit 的来源,似乎没有明显或受支持的方式来做到这一点。解决方案不必很快——毕竟,代码只会在失败的单元测试中执行。但是,它应该是通用的,并且适用于将来添加的所有 F# 记录和可区分联合类型,而无需更改任何代码。谢谢。

新问题

正如 Mark Seemann 在评论中指出的那样,Unquote 库是一种不存在非结构化输出问题的替代方案。所以我将用 Unquote 替换 FSUnit。但是,Unquote 还存在另一个问题:它使用 F# 的反射库来评估和减少可区分联合。显然,反射无法处理另一个库中定义的内部类型,导致所有单元测试都失败并出现异常。解决方法是公开所有类型,显然这并不理想。

所以我的设置是:一个包含应该测试的内部类型的库;该库使用该InternalsVisibileTo属性使其内部对测试程序集可见。执行测试时,Unquote 使用 F# 的反射,这反过来似乎无法正确反映内部类型。

还有其他已知的解决方法吗?

0 投票
2 回答
1398 浏览

f# - f# 中的参数化测试 - 这不是有效的常量表达式

由于某种原因,当通过TestCaseattrubute 将参数传递给测试时,我收到以下关于第一个参数的错误消息,在本例中是一个数组:

这不是有效的常量表达式或自定义属性值

但是,当从属性和方法本身中删除最后一个参数时,一切正常。

我究竟做错了什么?最好我也会定义一个元组,int * int但它似乎也不起作用。