2017-06-12 64 views
0

我正在阅读关于使用Scala语言的Property based testing。在这张幻灯片中,他们提出了这个概念:证明函数a+b是正确的。我们仅仅只证明这些语句是在随机数据为真:Scala:基于属性的测试:如何在编写测试时知道所有的必要测试用例

  1. A + B = B + A
  2. 一个+ 0 = A
  3. 一个+ 1 + 1 = A + 2

我的问题是:哪些方法用于检查我们的测试用例是否足够,并且可以覆盖所有不同数据的情况。例如在前面的例子中,我们如何确定在我们的三个属性正确运行后,我们可以确定我们的实现是正确的。

+1

'3.'看起来不正确 – stark

回答

0

首先,我假设,你在#3中有一个错字,它应该是+而不是*

要回答你的问题,你当然可以而不是如果你证明了这三个属性,请确保你的实现是正确的。考虑这一点的实现,例如,满足所有三个属性,但绝对是错误的:

def wrongPlus(a: Int, b: Int) = if(a < 3 || b <3) b a+b else 0 

要明确证明(整数)此外,你需要有一个独立的执行next整数。然后,通过定义:

1. a + 0 = a 
2. a + next(b) = next(a + b) 

如果这些特性适用于任何A和B以及一些操作+,然后+的确是加法。

+0

你能告诉我函数'next'的含义吗?此外,是否有任何方法可以确定我们已经为基于属性的测试制定了所有条件。谢谢 –

+0

'next'只是“+1”。这是自然数如何定义的。 '1 = next(0)'是一个自然数,对于每个自然N,恰好有一个M = next(N),这也是自然数。上面的两个属性是整数加法的定义,所以你知道,如果他们满意,你的操作就是定义的加法。没有通用的规则来确定哪些属性要验证任何操作。你是唯一一个能够操作你的操作属性的人。 – Dima

相关问题