Ankündigung

Einklappen
Keine Ankündigung bisher.

PhpUnit + Mockery scheinbar Probleme mit Modeltests

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PhpUnit + Mockery scheinbar Probleme mit Modeltests

    Hey,
    aktuell beschäftige ich mich mehr mit Unit-Tests und ich bin auf ein Problem gestoßen welches ich mir nicht erklären kann.
    Ich nutze Laravel 5.7.
    Folgende public function wird getestet:

    PHP-Code:
    public function createArea(CreateAreaRequest $request): Area
    {
         
    $area = new Area();
         
    $area->setRawAttributes(
              
    $this->hydrator->extract($request)
         );
         
    $area->saveOrFail();
         return 
    $area;

    Area ist ein Model, der Hydrator ist extra getestet.
    An sich muss diese funktion nicht getestet werden, aber naja ... wenn ich sie teste bekomme ich folgenden Fehler:

    HTML-Code:
    1) Tests\Services\Area\AreaServiceTest::testCreateAreaWorks
    PHPUnit\Framework\Exception: PHP Fatal error:  Cannot redeclare Mock_Area_3ced3a0d::expects() in /home/dev/Development/vendor/phpunit/phpunit/src/Framework/MockObject/Generator.php(624) : eval()'d code on line 967
    Fatal error: Cannot redeclare Mock_Area_3ced3a0d::expects() in /home/dev/Development/phpunit/phpunit/src/Framework/MockObject/Generator.php(624) : eval()'d code on line 967
    und so sieht die dazugehörige Testklasse aus:

    PHP-Code:
    class AreaServiceTest extends TestCase
    {
           public function 
    setUp()
           {
                
    parent::setUp();
           }

          public function 
    tearDown()
          {
               
    parent::tearDown();
               \
    Mockery::close();
          }

         public function 
    testCreateAreaWorks()
         {
               
    $request = new CreateAreaRequest();
               
    $request->setName('name');
               
    $request->setImage('image');
               
    $mock $this->getServiceMock([]);
               
    $areaMock = \Mockery::mock('overload:' Area::class);
               
    $areaMock->shouldReceive('setRawAttributes')
                                 ->
    once()
                                 ->
    andSet('name''name')
                                 ->
    andSet('image''image')
                                 ->
    andReturnSelf();
               
    $areaMock->shouldReceive('saveOrFail')
                               ->
    once()
                               ->
    andReturnNull();
               
    $result $mock->createArea($request);
               
    $this->assertEquals($result$areaMock);
          }

          protected function 
    getServiceMock(array $methods): AreaService
          
    {
              return 
    $this->getMockBuilder(AreaService::class)
                               ->
    disableOriginalConstructor()
                               ->
    setMethods($methods)
                               ->
    getMock();
         }

    Nun verstehe ich nicht ganz warum der Fehler auftritt ...

    ich hoffe hier weiß jemand bescheid ? Ist es ein Mockery Problem oder habe ich etwas übersehen ?

    Php 7.2, Laravel 5.7 , Phpunit 7.0

    Grüße Cnodex


  • #2
    Hi,

    das hilft Dir weiter: https://laracasts.com/series/build-p...me/episodes/17

    Du kannst keine (wie die Meldung schon sagt) keine bereist existierende Funktion neu deklarieren. Gilt auch für das schieben in Namespaces; eine Funktion mit demselben Namespace kann nicht erneut mehrfach deklariert werden.

    mfg
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar

    Lädt...
    X