2015-08-13 1 views
3

В XCTest с быстрым вы можете определить фиктивные объекты в тестовой функции вам нужно его. Как такXCTest и используя фиктивные объекты в качестве приемников уведомления

func testFunction(){ 
    class mockClass: AnyObject{ 
     func aFunction(){ 
     } 
    } 
} 

Я пытаюсь использовать эти фиктивные объекты, чтобы проверить, что другая функция отправляет правильное уведомление при определенном условии (в моем случае, когда уведомление об успешности транслируется с кодом статуса 204 для объекта.

Проблема, с которой я столкнулась, заключается в том, что я получаю ошибку «Нераспознанный селектор» хотя функция deletedSuccess() явно там/

Heres некоторый код дамп

func testDelete(){ 
    let expectation = expectationWithDescription("Post was deleted") 

    class MockReciever : AnyObject { 
     func deleteSuccess(){ 
      println("delete successfull") 
      expectation.fulfill() 
     } 
    } 

    let mockReciever = MockReciever() 
    NSNotificationCenter.defaultCenter().addObserver(mockReciever, selector: "deleteSuccess", name: PostDeletedNotification, object: post) 
    let response = NSHTTPURLResponse(URL: NSURL(), statusCode: 204, HTTPVersion: nil, headerFields: nil) 
    let request = NSURLRequest() 
    post.deleteCompletion(request, response: response, data: nil, error: nil) 

    waitForExpectationsWithTimeout(30, handler: { (error) -> Void in 
     if error != nil{ 
      XCTFail("Did not recieve success notification") 
     } else { 
      XCTAssertTrue(true, "post deleted successfully") 
     } 
     NSNotificationCenter.defaultCenter().removeObserver(mockReciever) 
    }) 
} 

Есть ли какие-то проблемы с использованием фиктивных объектов и селекторы так, что я не знаю о?

ответ

6

Вам не нужно вводить макеты для проверки уведомлений. Существует метод -[XCTestCase expectationForNotification:object:handler:].

И вот an answer о том, как получать уведомления из NSNotificationCenter в классах Swift, которые не наследуются от NSObject. Технически это дублирующий вопрос.

+0

Не совсем дублированный вопрос. Я пробовал делать mock-объекты NSObject и UIViewController (поскольку это контроллер представления, который получает уведомление в самом приложении), и каждый раз я получал ту же ошибку. Мой вопрос заключается в том, могут ли макетные объекты использоваться в качестве наблюдателя. Я попробую завтра ожидать функциюNotification завтра и сообщит вам, если она работает – AndyRyan

+0

Работала с благодарностью. Даже используя блок завершения для тестирования вещей, которые должны произойти до отправки уведомления – AndyRyan

+0

Да, это отличный способ проверить NSNotificationCenter. Существует аналогичный метод для тестирования KVO. – kean