Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHPUnit][PHP7.1] Działanie typów zwracanych w PHPUnit
czychacz
post 25.05.2017, 19:38:39
Post #1





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat
G:\htdocs\project>.\vendor\bin\phpunit
PHP Fatal error: Cannot use 'null' as class name as it is reserved in G:\htdocs
\project\src\Named\NamedTrait.php on line 32


Na taki błąd natknąłem się dzisiaj, gdy chciałem napisać testy jednostkowe dla mojej aplikcaji. Podobnymi błędami rzuca w przypadku typu void.
Czy to standardowy błąd PHPUnit, czy może trzeba po prostu coś inaczej zrobić?
Go to the top of the page
+Quote Post
Pyton_000
post 25.05.2017, 19:43:37
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


My nie wróżki, kod pokaż który testujesz i test
Go to the top of the page
+Quote Post
czychacz
post 25.05.2017, 19:56:39
Post #3





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. namespace Project\Named;
  4.  
  5. trait NamedTrait
  6. {
  7.  
  8. /**
  9.   * Table name
  10.   *
  11.   * @var string
  12.   */
  13. protected $name;
  14.  
  15. public function __construct(string $name)
  16. {
  17. $this->setName($name);
  18. }
  19.  
  20. public function getName(): string
  21. {
  22. return $this->name;
  23. }
  24.  
  25. protected function setName(string $name): void
  26. {
  27. $this->name = $name;
  28. }
  29. }

  1. <?php
  2.  
  3. namespace Project;
  4.  
  5. use Project\Named\NamedTrait;
  6.  
  7. class Table
  8. {
  9.  
  10. use NamedTrait {
  11. NamedTrait::__construct as protected namedConstruct;
  12. }
  13.  
  14. public function __construct($name)
  15. {
  16. $this->namedConstruct($name);
  17. }
  18. }
  1. <?php
  2.  
  3. use PHPUnit\Framework\TestCase;
  4. use Project\Table;
  5.  
  6. class TableTest extends TestCase
  7. {
  8.  
  9. const TABLE_NAME_TEST = 'test';
  10.  
  11. /**
  12.   * @dataProvider providerTable
  13.   */
  14. public function testTable(Table $table)
  15. {
  16. $this->assertInstanceOf(\Project\Table::class, $table);
  17. $this->assertEquals(self::TABLE_NAME_TEST, $table->getName());
  18. }
  19.  
  20. public function providerTable()
  21. {
  22. return array(
  23. new Table(self::TABLE_NAME_TEST)
  24. )
  25. );
  26. }
  27. }


Dla
  1. NamedTrait::setName(string $name): void
dostaję błąd:
Cytat
The data provider specified for TableTest::testTable is invalid.
Return value of HaruDb\Table::setName() must be an instance of HaruDb\Named\void
, none returned

Jeśli zmienię zwracany typ na null, to dostaję komunikat z pierwszego postu.

Podałem informację o namespace HaruDb - taki jest namespace po przeróbkach kodu.

Cytat
Time: 40 ms, Memory: 4.00MB

There was 1 warning:

1) Warning
The data provider specified for TableTest::testTable is invalid.
Return value of Project\Table::setName() must be an instance of Project\Named\vo
id, none returned

WARNINGS!
Tests: 1, Assertions: 0, Warnings: 1.
Go to the top of the page
+Quote Post
com
post 25.05.2017, 20:40:32
Post #4





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


a gdzie declare(strict_types=1);
Go to the top of the page
+Quote Post
Pyton_000
post 25.05.2017, 21:12:27
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Deklarując `:void` musisz dać return.
Go to the top of the page
+Quote Post
markuz
post 25.05.2017, 21:19:42
Post #6





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Upewnij się, że odpalasz to na php 7.1

@Python void jest właśnie od tego żeby return nie musiało być smile.gif [chyba]


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 25.05.2017, 21:25:11
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Taki duży a dokumentacji nie czyta wink.gif
http://php.net/manual/en/migration71.new-f....void-functions
Go to the top of the page
+Quote Post
markuz
post 25.05.2017, 21:39:09
Post #8





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


@Python czytałem to zanim napisałem post, może mój angielski po prostu szwankuje ale:
Cytat
Functions declared with void as their return type must either omit their return statement altogether, or use an empty return statement.

Czy to nie oznacza, że funkcje zdeklarowane z void jako return type muszą albo pomijać return całkowicie albo używać pustego return;?

Ten post edytował markuz 25.05.2017, 21:43:19


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 25.05.2017, 21:52:06
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Racja. W sumie sam nie doczytałem smile.gif

aa dobra... Pewnie masz PHP 7.0, a ten feature jest od 7.1

Przed chwilą sprawdziłem i na 7.1.5
  1. <?php
  2. declare(strict_types=1);
  3.  
  4. function test():void {
  5. echo 'aa';
  6. }
  7.  
  8. test();

działa, a na 7.0 się wywala.
Go to the top of the page
+Quote Post
com
post 25.05.2017, 22:08:14
Post #10





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


void to void nic nie zwraca tongue.gif
Go to the top of the page
+Quote Post
czychacz
post 26.05.2017, 17:57:49
Post #11





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Nagłówek z phpinfo();
Cytat
PHP Version 7.1.4


Poza tym sam kod php poza PHPUnit śmiga bez zarzutów.
  1. declare(strict_types=1);

Ta deklaracja powinna być w każdym pliku? Po kiego grzyba coś takiego?

Skrypt z jakiegoś powodu działa nawet bez niej :E

Ten post edytował czychacz 26.05.2017, 17:58:30
Go to the top of the page
+Quote Post
com
post 26.05.2017, 19:19:28
Post #12





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


to w końcu działa czy nie działa, a no poto żeby php wiedział czy trzymasz się typów czy nie
Go to the top of the page
+Quote Post
czychacz
post 26.05.2017, 19:36:30
Post #13





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(czychacz @ 26.05.2017, 18:57:49 ) *
Poza tym sam kod php poza PHPUnit śmiga bez zarzutów.

Wyraźnie napisałem, że POZA PHPUnit wszystko działa.
Czyli PHPUnit nie działa - chyba logiczne.
Go to the top of the page
+Quote Post
com
post 26.05.2017, 19:38:08
Post #14





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Nie zauważyłem wink.gif
Jaka wersja PHPUnit?

Ten post edytował com 26.05.2017, 19:40:05
Go to the top of the page
+Quote Post
nospor
post 26.05.2017, 21:12:03
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Poza tym sam kod php poza PHPUnit śmiga bez zarzutów.

Jak dla mnie, to kod ci dziala gdy odpalasz go przez przegladarke a nie dziala ci gdy odpalasz go z konsoli.
Wniosek jest dosc oczywisty: w konsoli masz inne php niz w na serwerze www


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
czychacz
post 27.05.2017, 07:37:16
Post #16





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Faktycznie, zapomniałem zmienić PATH po instalacji PHP 7.1
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.06.2025 - 20:57