2015-08-30 12 views
8

Dlaczego kiedy testuję moje kontrolery w Xcode wszystko jest w porządku, ale metody deinit nie są wywoływane. Czy to jest poprawne?UITests: deinit nie jest nazywany

Podczas gdy aplikacja działa normalnie, jest w porządku, ale nie dla celu UITest.

Dla skomplikowanych struktur symulator przydziela więcej niż jeden obiekt i ... nie zwalniaj go w ogóle. Tak więc często na wolniejszych komputerach aplikacja czasami wychodzi bez żadnego powodu ... a testy nie mogą zostać spełnione.

Korzystanie z Xcode 8, iOS 10, macOS Sierra.

+0

jest wystąpienie utworzony w kodzie testowym lub w kodzie aplikacji hosta? –

+0

Myślę, że w kodzie aplikacji hosta. UITests uruchomione przy użyciu aplikacji hosta (nie jestem pewien). –

+0

Jak wykryto, że metody "deinit" nie zostały wywołane? Jeśli to możliwe, opublikuj kod testowy. To może bardzo pomóc. –

Odpowiedz

0

Nie mogę odpowiedzieć na twoje pytanie w sposób definitywny, nie widząc próbki kodu testowego, jednak twoja sprawa sprawia, że ​​podejrzewam kilka rzeczy.

Zasadniczo dzieje się tak, że aplikacja tworzy nowe procesy dla każdego przeprowadzanego testu. Przeciek pamięci gdzieś wewnątrz kodu byłby pierwszym problemem do zbadania. W przypadku nieszczelnej pamięci struktura testowa może przekształcić się w wiele procesów, co może spowodować awarię i umożliwić emisję pod radarem podczas normalnego działania.

Ponadto, chyba że dezinicjalizuje się kontrolery jawnie za pomocą funkcji odrywania w swojej klasie testowej, proces jest zwykle po prostu zabijany na końcu testu. Jeśli chcesz przetestować swoją ponowną inicjalizację, sugerowałbym jawne wywołanie odrywania w testach w celu przetestowania zachowania przydziału pamięci. Ponadto funkcja analizy Xcode może być przydatna tutaj.

Jeśli mógłbyś opublikować próbkę twojego kodu testowego, byłaby to wielka pomoc, a ja odpowiednio zredaguję swoją odpowiedź.

0

Upewnij się, że deinit nie jest pusty. Jeśli nie jest pusty, to nigdy nie będzie działał.wszystko, czego potrzebujesz do zwolnienia i sprawdź, czy działa, czy nie.

Moja sugestia

better to use dealloc method rather than using deinit. 
Powiązane problemy