Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: phpunit lapanie wyjatkow
Forum PHP.pl > Forum > Gotowe rozwiązania
nospor
Hejka, uzywam PHPUNit 6.3.0 i probuje lapac wyjatki jednak nie dziala

  1. use DataService\Exception\FileIOException;
  2.  
  3. ....
  4.  
  5. /**
  6.   * @expectedException FileIOException
  7.   */
  8. public function testLoadWithWrongFilePath(): void
  9. {
  10. throw new FileIOException('Aa');
  11. }
  12.  

Przy czyms takim dostaje blad
ReflectionException: Class FileIOException does not exist

oczywiscie klasa ta instnieje, namespace i wszystko jest ok. Gdy odpalam normalne obiekty (nie wyjatki) z tyych samych namespace wszystko dziala.

Zas gdy odpalam jakas metode, ktora rzuca tym wyjatkiem, to nie ma bledu, ze klasa wyjatku nie istnieje, jednak skolei w ogole nie lapie tego wyjatku i zglasza blad, ze rzucilo wyjatkiem ktorego nie zlapalo.
  1. use DataService\Exception\FileIOException;
  2. use DataService\FileIO\QuestionsFileIO;
  3.  
  4. ....
  5.  
  6. /**
  7.   * @expectedException FileIOException
  8.   */
  9. public function testLoadWithWrongFilePath(): void
  10. {
  11. $questionsIO = new QuestionsFileIO();
  12. $questionsIO->load('/wrong/path.scv'); // ta metoda rzuca wyjatkiem FileIOException
  13. }



Bawilem sie w jakies xdebug.show_exception_trace bo tylko to znalazlem w necie ale nie tez nic to nie poprawia.
markuz
Pokaż namespace testu i wyjątku (i use).
nospor
test:
  1. namespace Tests\Functional\DataService\FileIO;
  2.  
  3. use DataService\Exception\FileIOException;
  4. use DataService\FileIO\QuestionsFileIO;
  5. use PHPUnit\Framework\TestCase;


wyjatek
  1. namespace DataService\Exception;
  2.  
  3. use Exception;
  4.  
  5. class FileIOException extends Exception
  6. {
  7. }






Gdy zamiast komentarza @expectedException dam
$this->expectException(FileIOException::class);
to dziala dla pierwszej sytuacji, czyli gdy recznie odpalam wyjatek w tescie.
Nadal jednak nie dziala dla sytuacji, gdy to wywolywana metoda w tescie rzuca tym wyjatkiem

edit: dobra, wszystko dziala. W kodzie rzucajacym wyjatkiem mialem
  1. if (($handle = fopen($filePath, 'rb')) === false) {
  2. throw new FileIOException("Can not open '$filePath' file");
  3. }

I zanim rzucilo wyjatkiem to wpierw rzucalo bledem od fopen.... Dodalem @ i dziala smile.gif
pyro
A jak wygląda Twój phpunit.xml(.dist) ?
nospor
Kod
<?xml version="1.0" encoding="UTF-8"?>

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="vendor/autoload.php"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <server name="KERNEL_DIR" value="./" />
    </php>

    <testsuites>
        <testsuite name="functional">
            <directory>tests/Functional</directory>
        </testsuite>
        <testsuite name="unit">
            <directory>tests/Unit</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist>
            <directory>src</directory>
        </whitelist>
    </filter>

    <logging>
        <log type="coverage-html" target="/var/www/html/phpunit_data-service/report" lowUpperBound="35" highLowerBound="70"/>
        <log type="junit" target="/var/www/html/phpunit_data-service/logfile.xml" logIncompleteSkipped="false"/>
        <log type="coverage-clover" target="/var/www/html/phpunit_data-service/coverage.xml"/>
    </logging>
</phpunit>


Czyzbys zmierzal do tego:
<ini name="error_reporting" value="-1" />
?
Jesli tak to ja chce by mi sie wyswietlaly generalnie wszystkie bledy php
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.