Модульное тестирование Swift-приложения, которое использует Parse.com


У меня есть пример приложения, использующего Parse.com как бэк-энд, и теперь я пишу некоторые юнит-тесты. Как сказано в документации по синтаксическому анализу, при создании подкласса PFObject я реализовал метод initialize:

override class func initialize() {
    struct Static {
        static var onceToken : dispatch_once_t = 0;
    }
    dispatch_once(&Static.onceToken) {
        self.registerSubclass()
    }
}

Когда я запускаю модульные тесты, мое приложение аварийно завершает работу в методе initialize со следующей ошибкой:

Завершение работы приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: "пытался зарегистрировать оба имени цели.MyObject и TargetNameTests.MyObject как родной PFObject подкласс MyObject. Не удается определить правильный класс для использования, потому что ни один из них не наследуется от другого.

Есть идеи, как решить эту проблему?

1 3

1 ответ:

Единственный способ, который я нашел, чтобы сделать эту работу, - это не включать подкласс в тестовую цель и объявлять подкласс и его переменные и методы открытыми. А также импортировать цель приложения

#import MyProject
#import Parse
#import XCTest

public class MySubClass: PFObject, PFSubclassing {
     @NSManaged public var name: String?

     public static func parseClassName() -> String {
       return "MySubClass"
     }
}

Затем в тестовом файле нужно вызвать класс как таковой:

let testObject = MyProject.MyClass()