4

例如,Reducio(用于 Java/Scala)和QuickCheck(用于 Haskell)。我正在考虑的那种框架将为内置数据类型提供“生成器”,并允许程序员定义新的生成器。然后,程序员将定义一个断言某些属性的测试方法,将适当类型的变量作为参数。然后,该框架为参数生成一堆随机数据,并对该方法运行数百次测试。

例如,如果我实现了一个 Vector 类,并且它有一个 add() 方法,我可能想检查我的加法是否通勤。所以我会写一些类似的东西(用伪代码):

boolean testAddCommutes(Vector v1, Vector v2) {
    return v1.add(v2).equals(v2.add(v1));
}

我可以在两个特定向量上运行 testAddCommutes() 以查看该添加是否通勤。但是我没有编写一些 testAddCommutes 调用,而是编写了一个生成任意向量的过程。鉴于此,框架可以在数百个不同的输入上运行 testAddCommutes。

这会为任何人敲响警钟吗?

4

4 回答 4

4

有 FsCheck,它是从 QuickCheck 到 F# 以及 C# 的一个端口,尽管大部分文档似乎是针对 f# 的。我自己也一直在探索这些想法。见: http: //kilfour.wordpress.com/2009/08/02/testing-tool-tour-quicknet-preview/

于 2009-10-09T09:42:08.037 回答
1

我也可能理解不正确,但PEX可能对你有用。

于 2008-09-17T01:58:40.133 回答
1

详细说明我之前的评论,用于测试伪代码示例的 QN 代码如下所示:

新的测试运行(1, 1000)
    .AddTransition(new MetaTransition<Input<Vector, Vector>, Vector>
    {
        名称=“矢量添加”,
        生成器 = DoubleVectorGenerator,
        执行 = 输入 => input.paramOne.Add(input.paramTwo)
    }
    .注册属性(
        (输入,输出)=>
            新的 Qn 属性(
                “是交流的”,
                () => QnAssert.IsTrue(输出 == input.paramTwo.Add(input.paramOne) )
            )
        )
    )
    。核实()
    .RethrowLastFailureifAny()
    .ReportPropertiesTested(new ConsoleReporter());

其中 DoubleVectorGenerator 是一个用户定义的类,提供 Input<Vector, Vector> 类型的值。

于 2009-10-16T22:12:33.320 回答
-1

我可能没有正确理解您,但请检查一下...

http://www.ayende.com/projects/rhino-mocks.aspx

于 2008-09-16T22:04:47.950 回答