目标是使用正则表达式在Scala中使用1到10的TDD随机整数范围。
测试
test("randomInteger") {
assert(NumberSequences.randomInteger(10) === 1|2|3|4|5|6|7|8|9|10)
}
主要
def randomInteger(a: Int) : Int = {
scala.util.Random.nextInt(a) + 1
}
结果
> test
[error]
numbersequences\scala\NumberSequencesTest.scala:53:
value | is not a member of Option[String]
[error] assert(NumberSequences.randomInteger(10) === 1|2|3|4|5|6|7|8|9|10)
[error] ^
[error] one error found
[error] (test:compile) Compilation failed
[error] Total time: 1 s, completed Jul 29, 2014 8:25:28 PM
答案 0 :(得分:1)
您可以使用TDD转换阵列。您可以通过向每个整数添加1来转换数组,以便将0-9范围向上移动到1-10。您可以编写测试和匹配函数,其中函数的作用是为数组中的每个int添加1。在您的情况下,您可以将scala.util.Random.nextInt(a)的结果传递给函数。我知道这看起来微不足道,但以这种方式思考使我可以访问TDD并且它极大地改进了我的编码。
只是为了完成这个例子,如果你实际上是在编写scala.util.Random.nextInt()函数的代码,那么你可以TDD它。基本上你可以将伪随机种子设置为某个值,生成下一个伪随机数,然后验证新数字是否正确。
答案 1 :(得分:1)
为什么要使用正则表达式?这使您的测试变得缓慢且难以阅读。您可以assert
将值放在特定范围内:
val randomNumber = NumberSequences.randomInteger(10)
assert(randomNumber > 0 && randomNumber < 11)
话虽如此,从TDD的角度来看,我根本不会使用真正的随机数发生器。我会注入一个模拟代替scala.util.Random
,以便它的nextInt()
函数每次都提供相同的固定数。这样我就不必考虑实际函数的随机性,可以专注于测试我自己实现的功能。
答案 2 :(得分:0)
import scala.util.matching.Regex
val digits = """[1-9]|10""".r
assert(digits.pattern.matcher("0").matches())