C# .Net 2.0有基于规范的测试框架吗?

4
例如,Reductio(针对Java / Scala)和QuickCheck(针对Haskell)。我考虑的框架类型将为内置数据类型提供“生成器”,并允许程序员定义新的生成器。然后,程序员将定义一个测试方法,该方法断言某些属性,并将适当类型的变量作为参数。然后,该框架为参数生成大量随机数据,并运行该方法的数百个测试。
例如,如果我实现了一个向量类,并且它有一个add()方法,我可能想检查我的加法是否满足交换律。因此,我会写一些伪代码:
boolean testAddCommutes(Vector v1, Vector v2) {
    return v1.add(v2).equals(v2.add(v1));
}

我可以在两个特定的向量上运行testAddCommutes()来查看加法是否满足交换律。但是,我不会写几个testAddCommutes的调用,而是编写一个生成任意向量的过程。有了这个过程,框架可以在数百种不同的输入上运行testAddCommutes。这对任何人都有所启发吗?
4个回答

4

1

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


1

为了阐述我之前的评论,测试伪代码示例的QN代码应该类似于:

new TestRun(1, 1000)
    .AddTransition(new MetaTransition<Input<Vector, Vector>, Vector>
    {
        Name = "向量相加",
        Generator = DoubleVectorGenerator,
        Execute = input => input.paramOne.Add(input.paramTwo)
    }
    .RegisterProperty(
        (input, output) =>
            new QnProperty(
                "是否满足交换律",
                () => QnAssert.IsTrue(output == input.paramTwo.Add(input.paramOne) )
            )
        )
    )
    .Verify()
    .RethrowLastFailureifAny()
    .ReportPropertiesTested(new ConsoleReporter());

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


-1

1
模拟并不是被询问的内容。 - Dan Fitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接