Niedawno zaktualizowałem do Xcode 7 beta 5. Próbowałem dodać test jednostkowy do wcześniejszego projektu, ale w @testable import myModuleName
linii pojawia się komunikat o błędzie „Nie ma takiego modułu [nazwa_modułu]” .
próbowałem
- czyszczenie projektu za pomocą OptionClean Build Folder
- zaznaczenie, że opcja „Włącz testowalność” (debugowanie) została ustawiona na Tak w opcjach kompilacji
- usunięcie celu testów, a następnie ponowne dodanie pakietu testów jednostkowych iOS
Nic z tego nie działało w tym projekcie (ale dostałem testy do pracy w innym projekcie). Czy ktoś inny miał ten problem i go rozwiązał?
ios
xcode
unit-testing
xctest
Suragch
źródło
źródło
Odpowiedzi:
Sprawdź nazwę modułu, z którym próbujesz importować
@testable import "ModuleName"
. Nazwa modułu powinna być taka sama naTarget->Build Settings-> Product Module Name
źródło
space
i_
-
i_
. Jeden z moich projektów ma-
w nazwie minus , ale moduł ma_
zamiast tego podkreślenie""
pomysłu i dotarłem doExpected identifier in import declaration
Build Settings
wyboru projektu (nie testowe lub testy UI), a następnie szukaćPRODUCT_MODULE_NAME
jakichkolwiek pojawia się tam, co powinno iść po@testable import
Odpowiedź, która mi pomogła
Odpowiedź była taka, że miałem kilka błędów w projekcie, które powodowały niepowodzenie kompilacji. (To był zwykły błąd występujący codziennie w kodzie). Po naprawieniu błędów i ponownym wyczyszczeniu i skompilowaniu, wszystko zadziałało.
Zauważ, że te błędy nie pojawiły się na początku. Aby się pojawiły:
Jeśli są inne błędy, powinny się teraz pojawić. Napraw je, a następnie odkomentuj kod pliku testowego. Zniknął błąd „Nie ma takiego modułu”.
Jeśli to nie rozwiąże problemu dla innych osób, możesz również spróbować następujących rozwiązań:
Wyczyść folder kompilacji
Otwórz menu Produkt, przytrzymaj Optioni kliknij „Wyczyść folder kompilacji ...”
Upewnij się, że opcja Włącz testowalność jest ustawiona na Tak
W Nawigatorze projektu kliknij nazwę swojego projektu. Wybierz opcję Build Settings i przewiń w dół do opcji Build Options. Upewnij się, że Włącz testowalność jest tak (do debugowania).
Usuń i ponownie dodaj cel testów
Jeśli zrobiłeś inne rzeczy, przypuszczam, że prawdopodobnie nie musisz tego robić. Ale jeśli to zrobisz, pamiętaj, aby zapisać wszystkie testy jednostkowe, które już napisałeś.
Kliknij nazwę projektu w Nawigatorze projektu. Następnie wybierz cel testów. Kliknij przycisk minus (-) u dołu, aby go usunąć.
Następnie kliknij przycisk plus (+) i wybierz pakiet testów jednostkowych iOS, aby dodać go ponownie. Jak widać, w ten sam sposób możesz dodać pakiet testowania interfejsu użytkownika.
Kilka innych pomysłów
Lub...
Zostaw komentarz lub odpowiedź poniżej, jeśli znalazłeś coś innego, co zadziałało.
Związane z
źródło
Problem dla mnie polegał na tym, że cel wdrożenia iOS w testach nie był taki sam jak główny cel. Więc koniecznie sprawdź to.
W Twoim celu testowym:
źródło
Enable Bitcode
sięNo
na wiązce testów.W ten sposób zacząłem uruchamiać kod po wypróbowaniu wszystkich sugerowanych rozwiązań z wcześniejszych sugestii.
I wszystko działało jak urok. Mam nadzieję że to pomoże.
źródło
Jedną z rzeczy, na które należy zwrócić uwagę, jest to, że jeśli nazwa modułu zawiera znak myślnika,
-
zamiast tego będziesz musiał odnieść się do niego za pomocą podkreślenia_
. Z jakiegoś powodu podejrzewałem, że to może być problem i rzeczywiście był to mój problem.na przykład.
@testable import Ocean-Swift
staje się@testable import Ocean_Swift
Jeszcze jedno, jeśli używasz
@testable
składni, pamiętaj, aby nie uwzględniać kodu produkcyjnego w celu testowym. Przekonałem się, że spowoduje to niewytłumaczalną dziwność.źródło
App (Dev)
App__Dev_
Brzmi to jak błąd w ustawieniach kompilacji obu celów. Musisz upewnić się, że:
ENABLE_TESTABILITY
równa się Tak dla obu celów.PRODUCT_MODULE_NAME
Wartość docelową testowej powinna się różnić od aplikacji.źródło
Jeszcze jedna rzecz do sprawdzenia: jeśli masz projekt Objective-C, ale piszesz testy jednostkowe w języku Swift, upewnij się, że główny cel używa co najmniej jednego pliku Swift!
Więcej informacji:
Pracowałem nad projektem Objective-C, ale chciałem napisać testy jednostkowe w języku Swift.
Dodałem plik Swift do głównego celu, aby wygenerować niezbędny plik ProjectName-Bridging-Header.h, napisałem moje testy i wszystko działało poprawnie.
Później usunąłem plik Swift, ponieważ myślałem, że go nie potrzebuję (cały kod głównego celu jest w Objective-C ... pisałem tylko testy w języku Swift).
Problem pojawił się dopiero później, kiedy wykonałem „czysty / czysty folder kompilacji” i pojawił się problem „No Such Module”. Po pewnym zarysowaniu głowy dodałem nowy pusty plik Swift i problem zniknął.
Testowałem to wiele razy z / bez pliku Swift i działa tylko z nim ... więc albo będę musiał zostawić pusty plik w projekcie, przekonwertować część Objective-C na Swift lub dodać trochę nowy kod do projektu napisanego w języku Swift.
źródło
@testable import Foo
wiersza, testy jednostkowe powinny działać poprawnie.Dla tych, którzy przewinęli się do ostatniej odpowiedzi i nadal nic nie działało, oto co zrobiłem dla mnie po wykonaniu wszystkich innych porad dotyczących odpowiedzi. Używam Xcode 11:
Przyczyną problemu w moim przypadku była zmiana nazwy produktu
Nie wiedziałem, że zmiana nazwy produktu spowoduje również zmianę nazwy modułu produktu , czyli tej używanej do importu modułu w moich plikach testowych. Zmieniłem import w następujący sposób:
@testable import New_Name
Zadziałało
Mam nadzieję, że to pomoże
źródło
Po kilku dniach spędzonych nad tą kwestią w końcu zaczynam pracować nad swoim projektem. Problem był w nagłówku mostkowania - ścieżka w celu testów nie może być pusta, jeśli używasz nagłówka mostkowania w głównym celu
Mam nadzieję, że komuś zaoszczędzi to trochę czasu.
źródło
Upewnij się, że w ustawieniach kompilacji schematu testowego cel testu znajduje się na liście.
Obok przycisku odtwarzania wybierz schemat testowy, a następnie Edytuj schemat ..., przejdź do sekcji Budowa, kliknij plus + i wybierz cel, z którym chcesz przetestować.
W moim przypadku mamy wewnętrzny cel, z którym rozwijamy się (kilka drobnych różnic) i po scaleniu został on usunięty z konfiguracji testowej.
źródło
Oto kolejna rzecz do sprawdzenia, której nie ma na liście. Dla mnie miało to coś wspólnego z moim zespołem, być może dlatego, że Agent naszego zespołu nie zgodził się jeszcze na najnowszą Umowę licencyjną! Gdy wybrałem inny zespół w ustawieniach ogólnych mojego celu, ORAZ określiłem konkretny cel wdrożenia, taki jak 12.1 lub 11.0, nagle ostrzeżenie „Brak takiego modułu” zniknęło.
źródło
W moim przypadku miałem 3 problemy. Po pierwsze, musiałem określić ścieżkę importu w:
Po drugie, używałem Pods i musiałem zaimportować te strąki do moich testów, używając:
Trzeci, ponieważ użyłem nagłówka mostkującego w moim celu, dlatego musiałem określić nagłówek mostkujący, aby był taki sam dla testu.
źródło
Mój problem polegał na tym, że klasa, którą chciałem przetestować, miała znajdować się w oddzielnym module (kliencie API), ale klasa była w rzeczywistości elementem docelowym aplikacji, a nie celem struktury. Zmiana docelowego członkostwa klasy spowodowała, że błąd importu zniknął!
źródło
Środowisko: Scenariusz Xcode w wersji 9.0 (9A235)
: testowanie frameworka open source.
Miałem ten sam problem: „Nie ma takiego modułu”.
Rozwiązanie:
Oto plik testowy:
źródło
Miałem ten sam problem. Czyszczenie folderu kompilacji i ponowne uruchamianie Xcode nie zadziałało.
Pomogło mi upewnienie się, że ustawienie „Buduj tylko aktywną architekturę” celu i schematu testu jest zgodne z ustawieniem celu i schematu aplikacji.
źródło
Wykonałem powyższe kroki, które zadziałały. Jednak mój projekt miał więcej problemów. Otrzymałem to ostrzeżenie i nie mogłem uzyskać dostępu do klas z mojego głównego projektu w celu przetestowania w moim celu testowym.
Zauważyłem, że nazwa modułu produktu docelowego testu (YourTestTarget -> Build Settings -> search for
product module
) nie może być taka sama jak nazwa projektu.Po zmianie nazwy modułu produktu dla celu testowego wszystko działało.
źródło
Wypróbowałem wszystkie odpowiedzi tutaj, ale czerwona flaga nie zniknęła. Ale udało mi się to po prostu „uruchomić” pusty test i wszystko się wyjaśniło.
Rzeczy, które chciałbym mieć pewność, że zostały wykonane:
źródło
Dla mnie rozwiązaniem była zmiana nazwy @testable import myproject_ios na @testable import myproject po zaktualizowaniu nazwy produktu docelowego myproject-ios w Ustawieniach kompilacji / Opakowanie / Nazwa produktu / z $ {TARGET_NAME} na mój projekt.
źródło
Zostało to naprawione, kiedy zmieniłem cel wdrożenia z 9,3 na 11,0.
Ogólne> Cel wdrożenia> „11.0”
źródło
Moje rozwiązanie jest tutaj.
Najpierw kliknij OdeAlSwiftUITest.swift, a następnie sprawdź Project TargetName w docelowym członkostwie.
źródło
Jeśli używasz xcodebuild i znajdziesz ten problem, rozważ dodanie flagi obszaru roboczego do polecenia budowania.
Zmieniono to
Do tego
źródło
W celu testowym ustawień kompilacji sprawdź testowanie hosta, przyjmuje nazwę ustawioną w PRODUCT_NAME. Jest to nazwa, której powinieneś używać w klasach testowych.
Nie radzę zmieniać PRODUCT_NAME (dopasuj nazwę głównego celu)
źródło
Kliknij MyAppTests.swift w nawigatorze projektu i kliknij prawy panel, sprawdź swój moduł w docelowym członkostwie. W moim działa.
źródło
CocoaPods zaleca dodanie
inherit! :search_paths
do celu testowego w następujący sposób:Źródło: https://github.com/CocoaPods/CocoaPods/pull/8423#issue-244992565
źródło
Jak opisano w tej odpowiedzi , dodawałem testy Swift do projektu opartego wyłącznie na Obj-C. Rozwiązaniem było dodanie fikcyjnej klasy Swift, po czym Xcode monitowałby o dodanie nagłówka mostkującego, a następnie usunięcie klasy Swift. Potem wszystko było w porządku.
źródło
Oprócz innych wymienionych rzeczy musiałem dodać plik z klasą, którą próbowałem przetestować, do moich źródeł kompilacji dla modułu testów jednostkowych
źródło
Myślę, że mogło się to stać, ponieważ usunąłem przykładowe testy.
Usunąłem pakiet testów jednostkowych, a następnie dodałem go ponownie, jak pokazano na poniższych zdjęciach i wszystko było dobrze.
źródło