问题标签 [fscheck]

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

f# - 使用 FsCheck 测试类型列表

我有一个测试类型的属性可以成功地往返到 JSON 并返回。

我目前通过调用运行

我想要的是能够在我通过反射获得的类型列表上运行此属性(扫描我的程序集以查找我知道需要 JSON 可序列化的类型)

是否可以在运行时为列表中的类型运行此属性,而不是需要在我的测试中全部指定它们?

0 投票
2 回答
2683 浏览

f# - 如何在 FsCheck 中生成“复杂”对象?

我想创建一个FsCheck 生成器来生成“复杂”对象的实例。所谓复杂,是指 C# 中的现有类,它具有许多子属性和集合。这些属性和集合又需要为它们生成数据。

Menu想象一下这个类是用子集合命名的,Dishes并且Drinks(我正在编造这个,所以忽略糟糕的设计)。我想做以下事情:

  • 生成可变数量的Dishes和可变数量的Drinks
  • 使用 FsCheck API生成Dish和实例以填充其属性。Drink
  • Menu使用 FsCheck API在实例上设置一些其他原始属性。

如何为这种类型的实例编写生成器?这是一个坏主意吗?(我是基于属性的测试的新手)。我已经阅读了文档,但到目前为止显然还没有将其内化。

有一个不错生成记录示例,但这实际上只生成了 3 个相同类型的值float

0 投票
2 回答
334 浏览

unit-testing - 如何保证 FsCheck 的重现性

我们希望在持续集成中使用 FsCheck 作为我们单元测试的一部分。因此,确定性和可重复的行为对我们来说非常重要。

FsCheck 是一个随机测试框架,可以生成有时可能会中断的测试用例。关键是,我们不仅使用必须为每个输入保留的属性,例如 say List.rev >> List.rev === id。而是,我们做一些数字,一些测试用例可能会因为条件不好而导致测试中断。

问题是:我们如何保证,一旦测试成功,它就永远成功?

到目前为止,我看到以下选项:

  • 对种子进行硬编码,例如 0。这将是最简单的解决方案。
  • 制作非常具体的自定义生成器,以避免不良示例。当然可能,但结果可能非常困难,尤其是在要生成许多对象的情况下。
  • 忍受它,在某些情况下,由于病理情况,构建可能是红色的,并且只是重新运行。

在这样的设置中使用 FsCheck 的惯用方式是什么?

0 投票
2 回答
1157 浏览

f# - 如何在 FsCheck 中注册任意实例并让 xUnit 使用它?

我有一个类型Average,其字段count为正数int64double字段名为sum.

我做了一个任意生成有效实例的

如何Property在 xUnit 的样式测试中生成具有平均类型的参数?

0 投票
1 回答
319 浏览

f# - 在 FsCheck.XUnit 中,如何进行详细检查?

[<Property>]使用生成Check.VerboseAll样式时如何获取生成的运行?

0 投票
0 回答
180 浏览

fscheck - 使用 FsCheck 的 IndexOutOfRangeException

我刚刚开始使用 FsCheck 并一直在编写一些简单的测试。但是我一直遇到一个问题,它导致 Xunit 抛出异常,然后杀死 VS2012 测试运行程序(测试似乎永远运行)。

似乎任何返回非文字结果的尝试都会导致此异常。一些例子:

我通过 NuGet 安装了 FsCheck.Xunit——FsCheck.Xunit 的 0.4.02 版、FsCheck 的 0.9.2.0 和 Xunit 的 1.9.2。我正在运行 VS2012。我尝试以相同的结果同时定位 .Net 版本 4 和 4.5。

这是VS2012输出窗口的内容,但有例外:

------ 运行测试开始 ------ System.Reflection.TargetInvocationException: 调用的目标已抛出异常。---> System.IndexOutOfRangeException:索引超出了数组的范围。在 Xunit.ExceptionUtility.GetStackTrace(IFailureInformation failureInfo, Int32 index) 在 Xunit.Runner.VisualStudio.TestAdapter.VsExecutionVisitor.Visit(ITestFailed testFailed) 在 Xunit.TestMessageVisitor.DoVisit[TMessage](IMessageSinkMessage 消息,Func2 callback) at Xunit.TestMessageVisitor.OnMessage(IMessageSinkMessage message) at Xunit.TestMessageVisitor1.OnMessage(IMessageSinkMessage message) 在 Xunit.TestClassCallbackHandler.OnTest(XmlNode xml) 在 Xunit.TestClassCallbackHandler.OnXmlNode(XmlNode xml) 在 Xunit.XmlNodeCallbackHandler.System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent(String eventArgument) 在 System.Web。 UI.ICallbackEventHandler.RaiseCallbackEvent(String eventArgument) --- 内部异常堆栈跟踪结束 --- System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal Xunit.Sdk.ExecutorCallback.CallbackEventHandlerCallback 中的 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfoculture) 中的(对象 obj、Object[] 参数、Object[] 参数)。在 Xunit.Sdk.Executor.RunTests.<>c__DisplayClass12.<.ctor>b__11(ITestResult 结果) 在 Xunit.Sdk.TestClassCommandRunner.Execute 在 Xunit.Sdk.Executor.OnTestResult(ITestResult 结果,ExecutorCallback 回调) 通知(字符串值) (ITestClassCommand testClassCommand,列表1 methods, Predicate1 startCallback,谓词1 resultCallback) at Xunit.Sdk.Executor.RunTests.<>c__DisplayClass12.<.ctor>b__f() at Xunit.Sdk.Executor.ThreadRunner(Object threadStart) at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart(Object obj) Index was outside the bounds of the array. at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Xunit.Sdk.ExecutorCallback.CallbackEventHandlerCallback.Notify(String value) at Xunit.Sdk.Executor.OnTestResult(ITestResult result, ExecutorCallback callback) at Xunit.Sdk.Executor.RunTests.<>c__DisplayClass12.<.ctor>b__11(ITestResult result) at Xunit.Sdk.TestClassCommandRunner.Execute(ITestClassCommand testClassCommand, List1 方法,谓词1 startCallback, Predicate1 resultCallback) 在 Xunit.Sdk.Executor.RunTests.<>c__DisplayClass12.<.ctor>b__f() 在 Xunit.Sdk.Executor.ThreadRunner(Object threadStart) 在 System.Threading.ThreadHelper。 ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System。 Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart(Object obj)

测试用例对我来说看起来不错,我确定我一定遗漏了一些东西,但我看不到什么。有任何想法吗?

编辑:这只发生在测试在 VS2012 测试资源管理器中运行时。如果使用 xUnit GUI 运行,这些测试都会按预期工作。

0 投票
2 回答
1580 浏览

c# - 如何为 FsCheck 测试生成空字符串

使用FsCheck(Haskell QuickCheck 测试库的 F# 版本)从C#生成测试,我发现随机字符串生成器不会生成空字符串。

此外,似乎没有按设计处理空字符串,但我没有设法从文档中确定它。例如,仅在两个字符串(其中一个为空)之间进行选择是行不通的:

而字符串似乎是一种特殊情况,因为它处理的是定制对象,例如

与空值混合时:

0 投票
1 回答
534 浏览

testing - Properties throw off xUnit and the Test Explorer

I'm trying to figure out how to set up and use FsCheck by going through the following blog post:

http://www.clear-lines.com/blog/post/FsCheck-2b-XUnit-3d-The-Bomb.aspx

I've tried my best to mimic the whole process in the post, and everything works fine until the following piece of code:

According to the image in the blog post, this should result in one failed test in the Test Explorer. In my case however, I get this:

Nothing

I've tried messing around a bit with the code, and it seems that the [<Property>] attribute is the culprit.

The following piece of code, which contains some of the previous code from the blog post, will run fine if said attribute is outcommented, producing two passing tests, but produce nothing (see above image) otherwise.

Am I doing something wrong? Is something missing?

I am currently running...

  • Visual Studio Ultimate 2012 Version 11.0.61030.00 Update 4
  • F# 3.0 (I guess..? How do I check this exactly?)
  • FsCheck 0.9.4.0
  • FsCheck.Xunit 0.4.1.0
  • xUnit.net 1.9.2
  • xUnit.net runner for Visual Studio 0.99.7

Update

I tried the example on another computer, with the same results. However, I noticed a warning in the error list, which I didn't notice was also there on the laptop which I first tried this on.

The description says:

Navigating to the source of the warning, opens up Microsoft.Common.targets in an editor, showing me thousands of lines of incomprehensible XML and 101 further warnings.

If i remove the FsCheck packages and close the Microsoft.Common.targets file, all warnings disappear. I'm guessing this warning might be a clue to why things aren't working as expected, I'm still clueless how to solve this, though.

0 投票
1 回答
900 浏览

c# - Not empty string generator with FsCheck using c# fluent interface

I'm trying to create a not empty string generator but when running the test I still have empty strings as inputs.

Here is the code I wrote:

I'm using NUnit v. 2.6.2.12296, FsCheck v. 0.9.4.0 and FluentAssertions v. 3.0.90.0.

What if I also want to modify the generator so that it creates not empty strings that match a regular expression?

[EDIT] This is the code I'm using to create strings that contain letters but don't contain special characters:

0 投票
1 回答
268 浏览

f# - 以下 FsCheck 测试有什么问题

这可能很简单,但我是 FsCheck 的新手,不知道为什么下面会引发错误(“Geneflect:类型未处理 System.Numerics.BigInteger”)?

这是将 FsCheck 与 xUnit 集成一起使用。