Equatable Tuple для тестирования в Swift - PullRequest
0 голосов
/ 02 июня 2019

Я тестирую ряд функций в Swift.

Мне нужно сравнить сложный тип кортежа (и это должно быть в одном XCTAssertEqual выражении, а не сравнивать все составляющие типы кортежа.

Для простоты я пытаюсь сравнить мой известный ответ с самим собой в этом минимальном примере:

let answer: (question: [String], correctAnswerIndex: [String], givenAnswers: [String], givenAnswerIndex: [String]) = (question:[], correctAnswerIndex: ["0"], givenAnswers: ["0"], givenAnswerIndex: ["0"])
XCTAssertEqual(answer,answer)

Как и следовало ожидать, это приводит к ошибке, что типы типов не являются уравняемыми

Глобальная функция 'XCTAssertEqual (: : _: file: line :)' требует, чтобы '(вопрос: [String], правильныйAnswerIndex: [String], данный ответ: [String], учитываяAnswerIndex: [String]) 'соответствует' Equatable '

Поэтому я бы хотел, чтобы отдельное расширение в тестировании сделало их уравновешенными, самый близкий ответ, который я вижу, связан с общими параметрами, и я действительно хочу сделать это как можно более простым ...

1 Ответ

0 голосов
/ 02 июня 2019

Вместо Equatable есть обходной путь, который пишет функцию == для вашего Answer кортежа:

typealias Answer = (question: [String], correctAnswerIndex: [String], givenAnswers: [String], givenAnswerIndex: [String])
func ==(answer: Answer, anotherAnswer: Answer) -> Bool {
    // Implement your own equation logic here!
    return answer.question == anotherAnswer.question
        && answer.correctAnswerIndex == anotherAnswer.correctAnswerIndex
    && answer.givenAnswers == anotherAnswer.givenAnswers
    && answer.givenAnswerIndex == anotherAnswer.givenAnswerIndex
}

let answer: Answer = (question:[], correctAnswerIndex: ["0"], givenAnswers: ["0"], givenAnswerIndex: ["0"])
XCTAssertTrue(answer == answer)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...