问题标签 [expecto]

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

f# - FsCheck 与安装和拆卸

概括

是否有任何事件可以在每个属性案例之前运行,以便我可以为属性的每次运行运行设置和拆卸?

完整版本

我希望能够通过属性测试成对的行为,例如“我总是可以获取书面记录”或“readAllLines 的输出等于 writeAllLines 的输入”。我还希望该属性不关心操作集是如何实现的(即是否需要清理任何资源)。

每次运行该属性应

  • 独立于其他运行
  • 在此单次运行中维护操作调用之间的状态
  • 不知道操作如何保持状态
  • 不是资源泄漏

我正在使用 FsCheck 和 Expecto。示例将在 Expecto 中,但问题并非特定于框架。

使用基于示例的测试编写这种设置和拆卸非常容易。它们采用可预测的参数集,因此我可以在添加事件前后的包装器中运行它们。

属性测试不能做同样的事情。他们有未知数量的参数,这些参数将主要填充随机数据。

我可以很容易地应用这组配对行为,但是任何创建的资源(如流)都不会被处理。

我调查过

跑步者活动

查看如何运行 FsCheck 测试最接近的钩子似乎是

  • OnStartFixture每个测试类只运行一次
  • OnArguments在每次通过后运行,并且可能会运行清理
基于模型的特征

还有一些实验性的基于模型的测试功能可以工作。但是,考虑到我只关心操作的外部一致性,这似乎真的很重。我不想访问支持状态。

放弃和内联

我总能写

但我想避免每个属性中的样板和支持状态的暴露。

一次性用品

一次性对象也没有解决缺少设置挂钩的问题。

更多动手操作的运行循环

我研究了在包装器中运行属性测试的方法,但最小的运行器Check.one是针对单个属性的,在属性的运行之间没有挂钩。

懒惰的包装器

使包装器变得懒惰也不起作用testProperty name lazy(testWithSetup)

0 投票
0 回答
40 浏览

asynchronous - 如何在没有 RunSynchronously 的情况下断言 Expecto 中的异步异常?

我已经开始使用 F# Expecto 框架,但找不到正确的方法来断言异步计算表达式中的异常。

我的代码最终得到:

有一个更好的方法吗?(没有 RunSynchronously 并忽略)。

谢谢