在Swift中使用Rand测试

时间:2019-06-03 07:39:31

标签: swift

我想测试我的“掷骰子”功能,然后生成当前游戏的运行得分。

签名是:

VBox

因为我想换出随机函数,以便可以对其进行测试,所以可以通过以下方式调用随机函数:

func rollDice(randFunc: ((ClosedRange<Int>) -> Int)? = Int.random) -> (dice1: Int, dice2: Int, losePointsTurn: Bool, losePointsGame: Bool)

我在测试目标中为非随机函数创建了扩展

dice1 = randFunc!(0...5)
dice2 = randFunc!(0...5)

但是当我尝试在测试中使用它时:

extension ClosedRange {
    func noRand(_ : Bool) -> Int {
        return 0
    }
}

我有错误:

  

无法将'(ClosedRange)->(Bool)-> Int'类型的值转换为   预期的参数类型'(((ClosedRange)-> Int)?'

那么我该如何编写一个非随机的随机函数来交换该函数呢?

1 个答案:

答案 0 :(得分:3)

在示例代码中,noRand应该是一个接受ClosedRange并返回Int的函数。

没有理由将其扩展为ClosedRange。此外,您可以随意查看Int.random静态方法的签名,并且基本上可以进行复制和粘贴。

它的签名为(ClosedRange<Int>) -> Int,记为random(in:)。您的noRand函数必须具有相同的签名。

因此,这给我们留下了

func noRand(in range: ClosedRange<Int>) -> Int {
    return 0
}

请注意,不必将其作为ClosedRange的扩展名。考虑到仅在测试中使用它的事实,您最好在范围级别进行声明。