Problem
Aby poprawić jakość kodu, postanowiłem spróbować nauczyć się testować mój kod przy użyciu testów jednostkowych zamiast moich miernych w najlepszym rozwiązaniach testowych.
Zdecydowałem się zainstalować PHPUnit przy użyciu kompozytora dla osobistej biblioteki, która pozwala mi na osiągnięcie wspólnych funkcji bazy danych. Na początku nie miałem pliku konfiguracyjnego dla PHPUnit i kiedy uruchamiałem polecenia takie jak:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Należy pamiętać, że jest to polecenie terminala, więc nie dołączyłem .php
rozszerzenia. GeneralStringFunctionsTest, o którym mowa powyżej, jest w rzeczywistości GeneralStringFunctionsTest.php
plikiem.
Wynik jest taki, jakiego się spodziewałem:
Czas: 31 ms, pamięć: 2,75 Mb
OK (1 test, 1 asercja)
Następnie próbowałem użyć pliku konfiguracyjnego, aby automatycznie załadować zestaw testów, zamiast za każdym razem ręcznie wpisywać plik. Utworzyłem plik o nazwie phpunit.xml
w moim katalogu głównym i wprowadziłem do pliku: http://pastebin.com/0j0L4WBD :
<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
<testsuites>
<testsuite name="Tests">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Teraz, kiedy uruchomię polecenie:
phpunit
Otrzymuję następujący wynik:
PHPUnit 4.5.0 autorstwa Sebastiana Bergmanna i współpracowników.
Konfiguracja odczytana z /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml
Czas: 16 ms, pamięć: 1,50 Mb
Nie wykonano żadnych testów!
Na wypadek, gdyby było to pomocne, moja struktura katalogów jest następująca:
src - katalog najwyższego poziomu (z całym moim kodem źródłowym)
testy - katalog najwyższego poziomu (ze wszystkimi moimi testami, ma taką samą strukturę jak mój folder src )
dostawca - pliki stron trzecich Composer
Mam również plik Composer json i plik blokady, a także plik phpunit xml na najwyższym poziomie jako pliki.
Rzeczy, których próbowałem
- Zmiana katalogu
phpunit.xml
natests/GeneralStringFunctions
- Zmiana katalogu
phpunit.xml
na./tests
- Przeniesienie
phpunit.xml
pliku dotests
katalogu, a następnie zmiana katalogu na./
zamiasttests
. - Dodanie atrybutu sufiksu do znacznika katalogu w programie w
phpunit.xml
celu określenia „Testy” jako jawnego przyrostka.
źródło
tests/GeneralStringFunctions/GeneralStringFunctionsTest
jest to nazwa folderu czy pliku?GeneralStringFunctionsTest.php
. W interfejsie wiersza poleceń nie wpisałem.php
rozszerzenia, ponieważ działało bez niego.Test.php
raczej niżTest
w twoim przypadku, ale możesz go pominąć, ponieważTest.php
jest to wartość domyślna.phpunit.xml
?Odpowiedzi:
Jeśli chodzi o to, co jest warte (spóźnienie), natknąłem się na to niedawno, kiedy tworzyłem nowy projekt Laravel 5.1 dla prostej strony internetowej. Próbowałem go debugować i byłem zdezorientowany, gdy próbowałem:
(który ma domyślny test, który po prostu stwierdza, że prawda jest prawdą)
i zobaczyłem wyjście
To, co ostatecznie spowodowało problem, było związane z moją instalacją PHP - „phpunit” został globalnie zarejestrowany i skonfigurowany w inny sposób, podczas gdy phpunit dostarczony z instalacją Laravel został skonfigurowany prawidłowo i działał doskonale.
Tak więc poprawka polega na uruchomieniu skonfigurowanego phpunita dostawcy (z tego samego katalogu głównego, co app / i tests /):
Mam nadzieję, że to pomoże komuś innemu!
źródło
vendor/bin/phpunit
zamiast globalnegophpunit
pliku binarnego. Posunąłem się nawet do usunięcia globalnegophpunit
pliku binarnego, więc nie popełnię ponownie przypadkowo tego samego błędu - i od tamtej pory nie pojawił się. Oznaczę to jako zaakceptowaną odpowiedź, ponieważ najprawdopodobniej jest to powód../vendor/bin/phpunit
załatwiło sprawę na nowej instalacji laravel 5.4phpunit
alias
for./vendor/bin/phpunit
Twój plik XML jest w porządku. Musisz jednak upewnić się, że pliki PHP w twoim
tests/
folderze mają następujące nazwy:testy / Test.php <--- Zanotuj wielkie litery „T”
testy / użytkownik Test.php
testy / fooBar Test.php
itd.
Nazwy plików muszą kończyć się na „Test.php” . Tego właśnie szuka PHPUnit w katalogach.
Ponadto każda metoda testowa musi mieć nazwę zaczynającą się od „test”:
public function testFooBar() { // Your test code }
Mam nadzieję, że to pomoże!
źródło
--test-suffix=anything.php
do nadpisaniaW systemie Windows użyj następującego polecenia na terminalu
to jeśli polecenie
zwraca "Nie wykonano testów!"
podczas korzystania z komputera Mac
Mam nadzieję, że to pomoże.
źródło
phpunit
na Twojej ścieżce globalnej (możesz sprawdzić, czy działa coś takiego jakphpunit --version
i zobaczyć, czy pasuje do tego, czego się spodziewasz. Xampp zwykle instaluje phpunit w tym samym katalogu php bin. To był problem dla mnie.Miałem ten sam problem po zaktualizowaniu PHPUnit na naszych maszynach wirtualnych do wersji 6. Nawet opcje --debug i --verbose nie powiedziały nic przydatnego, tylko „Nie wykonano żadnych testów”. Ostatecznie okazało się, że w nowej wersji zmieniono klasy i przestrzenie nazw i po prostu nie chciał uruchamiać plików, które zawierały odniesienia do starych klas. Rozwiązaniem dla mnie było po prostu zastąpienie w każdym przypadku testowym tego:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
z:
use PHPUnit\Framework\TestCase; class MyTestCase extends TestCase {...}
źródło
Zdaję sobie sprawę, że to bardzo stare, ale mi się to po prostu przydarzyło. Mam nadzieję, że to komuś pomoże.
Mój problem polegał na tym, że zapomniałem symbolu „@” w / ** @test * /
ŹLE:
/** test */ function a_thread_can_be_deleted() { ... }
DOBRZE:
/** @test */ function a_thread_can_be_deleted() { ... }
źródło
@return void
nie zawiera „@test”, co jest powodem, dla którego phpunit nie mógł zidentyfikować to jako test.Ciągnąłem za włosy przez 10 minut, zanim zdecydowałem się użyć --debug (przy okazji), aby odkryć prosty fakt, że nazwa pliku nie jest zgodna z konwencją nazewnictwa , na końcu miałem dodatkowe „s” .
źle
dobrze
mam nadzieję, że ta notatka może komuś pomóc
źródło
Musisz tylko zadzwonić z pliku dostawcy
vendor\bin\phpunit
Uwaga \ Nie /źródło
Zamiast uruchamiać phpunit
posługiwać się
sprzedawca \ bin \ phpunit
źródło
jeśli używasz PHPSTORM, przejdź do Ustawień i gotowe
Test Frameworks
i kliknij + i wybierz
PHPUnit Local
następnieUse Composer Auto Loader
następnie wklej to jak w ścieżce do pola skryptuC:\{YOUR PROJECT NAME}\vendor\autoload.php
Kliknij OK
HAPPY TESTING
źródło
Sprawdź plik phpunit.xml , zajrzyj do zestawów testowych .
Moja wersja phpunit (2019) szuka plików z końcówką (sufiks) * Test.php. Dlatego upewnij się, że wszystkie pliki testowe mają prawidłowe nazwy (np .: BookTest.php jest poprawny, BookTests.php nie, BookTestCase.php nie).
źródło
Spóźniłem się na imprezę, ale ta informacja może pomóc innym.
Powyższe rozwiązania u mnie nie działają. Od Laravel 7.x, PHPUnit domyślnie wykonuje tylko pliki PHP z przyrostkiem „Test.php”. Na przykład, jeśli utworzysz test, nazwanie go
CreateUser
nie zadziała, podczas gdy nadanie mu nazwyCreateUserTest
zadziała.Aby pokonać to ograniczenie, przejdź do
phpunit.xml
i zmodyfikujsuffix
atrybut zdirectory
elementów:... <testsuite name="Unit"> <!-- modify suffix --> <directory suffix=".php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <!-- modify suffix --> <directory suffix=".php">./tests/Feature</directory> </testsuite> ...
To poinstruuje PHPUnit, aby uruchamiał wszystkie pliki z
.php
rozszerzeniami z katalogów. Uwaga dotycząca czyszczenia pamięci podręcznej aplikacji po aktualizacjiphpunit.xml
:Dodatkowe informacje o konfiguracji PHPUnit XML można znaleźć tutaj: https://phpunit.de/manual/6.5/en/appendixes.configuration.html
źródło
Czy dodałeś zestaw testów do pliku phpunit.xml?
<phpunit> <testsuite name="app1" > <directory>./</directory> </testsuite> </phpunit>
Możesz tam dodać wiele katalogów.
źródło
Time: 28 ms, Memory: 1.50Mb No tests executed!
Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!
. Zdecydowanie działa, gdy ręcznie odwołuję się do niego, po prostu nie lubi ładowania z pliku konfiguracyjnego z jakiegoś powodu :(Dla mnie użycie phpunit --debug pokazało mi, którego testu nie wykonywał, w środku
$this->visit('/') ->see('Laravel');
i myślę, że ponieważ katalog był chroniony przez uwierzytelnianie .htaccess, nie mógł przejść do odwiedzenia strony
Rozwiązaniem dla mnie było wykonanie tego testu (lub najprawdopodobniej wykupienie uwierzytelnienia .htaccess)
źródło
Jest już bardzo późno, ale mam nadzieję, że komuś to pomoże.
Moje testy mam do uruchomienia przy użyciu bezwzględnego odniesienia. struktura folderów [projekt / testy / test.php]
moja linia katalogu wyglądała tak ./tests/test.php
źródło
Może trochę z boku, ale jeśli (tak jak ja) używasz Laravel w Vagrant, upewnij się, że uruchamiasz phpunit w pudełku vagrant, a nie po stronie "okna". :)
źródło
Miałem problem z brakiem wykonywania testów, nawet gdy wszystko było dobrze skonfigurowane.
Przyczyną było to, że przestrzeń nazw nie była pierwszym poleceniem pliku, lecz po kilku komentarzach w bloku dokumentów.
przywracanie spowodowało, że phpunit zobaczył testy i działał poprawnie.
źródło
Mój był trochę zabawny.
Kiedy użyłem
php artisan make:test
, przypadkowo wstawiłem .php jakProductRewardPointController.php
który utworzył,ProductRewardPointController.php.php
a phpunit po prostu go zignorował.Po prostu usunąłem dodatkowy plik .php i wszystko wróciło do normy
źródło
Miałem ten sam problem Nie wykonano testów! , rozwiązany przez zachowanie tej samej nazwy pliku i nazwy klasy .
źródło
Jeśli używasz IDE, takich jak JetBrains PHPStorm , zwróć także uwagę, że: w
Run/Debug Configurations
oknie,Test scope
należy ustawićdirectory
i wskazać ten katalog, gdzie znajduje się twójtests
folder.Pół godziny zajęło mi zorientowanie się, że zapomniałem ustawić katalog. Możesz używać global,
phpunit.phar
o ile poprawnie ustawisz zakres testowy i katalog, IDE zajmie się innymi rzeczami za Ciebie.źródło
Nazwy funkcji w pliku testowym muszą być poprzedzone prefiksem
test
lub przed funkcją należy dodać komentarz/** @test */
Upewnij się, że tak nie jest
/* @test */
ponieważ to nie działa. po ukośniku muszą być dwie gwiazdki, a nie jedna.
źródło
użycie konsoli de cmd rozwiązało ten problem, przechodząc pełną ścieżkę Test zrealizowany
Nie znalazłem innego sposobu, żeby to zrobić. W ten sposób nie działa
Mam nadzieję, że to było pomocne dla kogoś
źródło