问题标签 [jqwik]
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.
java - 使用 flatMap 创建的任意不考虑过滤器
我正在尝试 jqwik(版本 1.5.1),我从文档中读到我可以创建一个Arbitrary
其生成的值取决于另一个提供的值Arbitrary
,特别是使用该flatMap
函数。
我的实际目标不同,但基于这个想法:我需要 2 Arbitrary
s,它总是为单个测试生成不同的值。这是我尝试过的:
它立即因这个示例而失败:
当然抛出AssertionError
:
我希望该filter
函数足以排除由生成的值,firstArbitrary
但似乎甚至没有考虑它,或者更有可能它做了其他事情。我错过了什么?有没有更简单的方法来确保给定一定数量的integer
生成器,它们总是产生不同的值?
java - 在 jqwik 属性测试框架中寻找更好的方法来生成图的边列表
目前我正在使用:
在这种情况下,我只是通过 id 指定源/目标顶点并添加一个流组件(可以是权重或任何数量的其他关联值)。该方案是从 [degree_min,degree_max] 制作一个度值列表,每个顶点一个,然后将该列表扩展为一个列表,其中每个源都重复度数次。一旦我有了那个列表,我就可以生成目标和标签序列并组合起来形成边缘。
这足以保证我有一个完整的顶点列表,并且每个顶点都有适当数量的传出边。但是,我认为这种方法不能很好地扩展以添加更现实/有用的约束。特别是考虑到可能采取的额外过滤和映射步骤,而且就目前而言,可能已经有太多了……
例如,我认为能够为每个节点的边缘创建任意值,然后加入任意值以生成边缘的整体列表可能会有所帮助,但我看不到在框架内有任何方法可以做到这一点(例如,Combine 是面向合并取自几个列表中的每一个的值,而不是加入列表)。
寻找任何改进这一点的建议。
java - 如何将参数传递给@Provide?
有没有办法将参数传递给@Provide
?我想要与以下内容等效的东西:
我尝试创建自定义注释
并按照Provider Methods with Parametersvoid test(@ForAll("charSequence") @Length(min = 2, max = 5) CharSequence cs)
中的建议使用它,但似乎没有选择自定义注释,. (仅被选中。)TypeUsage
@Length
@ForAll
java - 如何指定@ForAll 非零整数?
如何指定@ForAll
非零整数(即既包括正整数又包括负整数,或者0
从整数范围中排除)?我从https://jqwik.net/docs/current/user-guide.html#integer-constraints中找不到任何东西。
java - 您如何使用在另一个类中指定的 jqwik @Provider 作为 @ForAll 参数的一部分?
我们在一个类中指定了一堆生成器。
它们非常有用,所以我希望能够在不同的测试类中使用它们,而不是指定它们的地方。例如:
但是,jqwik 无法发现此 Provider,因为它位于当前类之外。当然,我可以从另一个类手动导入提供程序并在这个类中设置一个新的提供程序,但这一切都感觉有点笨拙。
有没有办法直接使用另一个文件中指定的提供者?
java - 1.5.0+升级后简单测试用例的OutsideJqwikException
测试问题
我编写了以下示例代码并在 intelliJ 上运行它,并在 v1.5.0+ 上不断收到相同的异常。相同的代码在 1.4.0 及更低版本上运行良好...
这是我将实际测试代码缩减为的示例代码:
堆栈跟踪:
- 删除
.use(Arbitraries.of("123")).in(StringBuilder::append)
将使测试通过,因此异常来自生成(int)。 - 更改为 .example 或使用 @Example 标记似乎也有帮助,但我认为我不需要这样做,因为这是升级后的一个新问题。