Использование Rand в тестировании в Swift - PullRequest
0 голосов
/ 03 июня 2019

Я хочу проверить свою функцию «Бросок кубиков», которая затем выдает текущий игровой счет игры.

Подпись:

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
    }
}

, ноКогда я пытаюсь использовать это в моем тесте:

gm.rollDice(randFunc: ClosedRange<Int>.noRand)

У меня ошибка:

Невозможно преобразовать значение типа '(ClosedRange) -> (Bool) -> Int'к ожидаемому типу аргумента' ((ClosedRange) -> Int)? '

Итак, как я могу написать неслучайную случайную функцию для замены в этой функции?

1 Ответ

3 голосов
/ 03 июня 2019

В вашем примере кода noRand должна быть функцией, которая принимает ClosedRange и возвращает Int.

Нет смысла расширять его до ClosedRange.Кроме того, вы можете просмотреть сигнатуру статического метода Int.random и, по сути, скопировать и вставить.

Его сигнатура (ClosedRange<Int>) -> Int, помечена как random(in:).Ваша noRand функция должна иметь такую ​​же сигнатуру.

Таким образом, это оставляет нам

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

Обратите внимание, что ее не нужно ставить как расширение ClosedRange.А учитывая тот факт, что вы будете использовать его только для тестирования, вы также можете заявить об этом на уровне области действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...