Как я могу проверить, была ли освобождена ссылка без ссылки в моих модульных тестах? - PullRequest
0 голосов
/ 01 октября 2019

Моя модель представления такова:

public class MainTabBarViewModel: MainTabBarInputs {
    unowned var output: MainTabBarOutputs
    ...
}

, где контроллер вида это:

class ViewController: MainTabBarOutputs {
    var viewModel: MainTabBarInputs!
}

Я пытаюсь написать модульный тест для проверки цикла сохранения:

class MainTabBarViewModelTests: XCTestCase {

    var viewModel: MainTabBarViewModel!
    var viewController: MockMainTabBarViewController!

    func testRetainViewController() {
        viewController = nil
        // TODO how do you test this
        expect(self.viewModel.output).to(beNil())
        // crashes because I can't 
        // reference an unowned pointer that's deallocated.
    }

Я знаю, изменил ли я свою ссылку на weak, я мог бы проверить это, но что, если я хотел бы оставить ее как unowned?

1 Ответ

1 голос
/ 01 октября 2019

Вы можете использовать слабую ссылку на контроллер в модульном тесте, и если эта ссылка становится нулевой, то у вас нет цикла сохранения:

func testRetainViewController() {
    weak var testRef = viewController
    viewController = nil
    expect(testRef).to(beNil())
}

Вы можете легко проверить вышеуказанный подходизменив значение с unowned на strong и увидев, что тест не пройден.

...