получить значение, переданное обработчику завершения для модульного тестирования

Я пытаюсь передать значение обработчику завершения для проверки на предмет модульного тестирования. Это не обычная установка для обработчика завершения, поскольку обработчик завершения - это var:

 typealias ResultType = Result<Data>
    typealias CompletionType = (ResultType) -> ()

 var onCompletion: CompletionType// this is the completion handler

open override func finished(_ errors: [NSError]) {
    self.urlSession.invalidateAndCancel()

self.onCompletion(Result.failure(EComError.networkError(.notReachable)))

    }
}

Я пытаюсь сравнить var: onCompletion с

self.onCompletion(Result.failure(EComError.networkError(.notReachable)))

но когда я пытаюсь напечатать var: onCompletion после того, как функция была возвращена, она возвращает:

Optional((Function))

Я пытаюсь написать такой тестовый пример:

   func test_finishedResult(){

        sut?.finished([NSError(code: OperationErrorCode.executionFailed)])
           XCTAssertEqual(sut?.onCompletion(Result.failure(EComError.networkError(.notReachable))), sut?.onCompletion)
    }

но возвращает ошибку:

Не удается преобразовать значение типа DownloadOperation.CompletionType? (aka 'Optional ‹(Result) -> ()>') в ожидаемый тип аргумента '()?'

куда

Загружается

- это имя класса, в котором находится функция.

Как лучше всего провести модульное тестирование того, что var:

по окончании

равно toself.onCompletion(Result.failure(EComError.networkError(.notReachable)))?


person SwiftyJD    schedule 16.04.2018    source источник


Ответы (1)


С помощью тестового кода вы сравниваете не значение, переданное в завершение, а вместо этого указатели функций ваших обратных вызовов.

Вероятно, вам нужно что-то вроде:

   func test_finishedResult() {
        // Set your callback here 
        sut?.onCompletion = { result in 
            // Compare the result here
            XCTAssertEqual(Result.failure(EComError.networkError(.notReachable)), result)
        }
        // Trigger the callback with the finished method
        sut?.finished([NSError(code: OperationErrorCode.executionFailed)])
    }
person Dejan Skledar    schedule 16.04.2018
comment
Отлично! Работает как шарм. - person SwiftyJD; 16.04.2018