Почему я получаю `Не могу загрузить фиктивный MyClassConsumer, класс уже существует`, когда я тестирую свои phpUnit stati c методы, которые создают тот же класс? - PullRequest
1 голос
/ 23 марта 2020

У меня есть следующий класс:


public function MyClass
{
  public static foo():string
  {
    // Some logic there
    // This is a dummy value just for explaining the problem
    return 'n123';
  }

  public static factory():MyClass
  {
    return new MyClass();
  }
}

Также у меня есть следующий класс:


class MyClassConsumer
{
 public function bar()
 {
   $myclass=MyClass:factory();
   $myclass->foo();
 }
}

В моем ClassConsumer также, как рекомендовано, я провел следующий тест phpunit :

use PHPUnit\Framework\TestCase;
use Mockery;
use MyClassConsumer;

class TestMyClassConsumer extends TestCase
{
  public function testBar()
  {
    $mockedFoo=Mockery:spy(MyClassConsumer::class);
    $mockedFoo->shouldReceive('foo')->andReturn('n1111');

    $mockedFactory=Mockery:mock('alias:'.MyClassConsumer::class);
    $mockedFactory->shouldReceive('factory')->andReturn($mockedFoo);

    $classConsumer=new ClassConsumer();
    $classConsumer->bar();
    $mockedFoo->shouldHaveReceived('foo');
  }
}

Но как только я проверил его, я получил следующую ошибку:

There was 1 error:

1) TestMyClassConsumer::testBar
Mockery\Exception\RuntimeException: Could not load mock MyClassConsumer, class already exists

/var/www/html/vendor/mockery/mockery/library/Mockery/Container.php:226
/var/www/html/vendor/mockery/mockery/library/Mockery.php:118
/var/www/html/tests/TestMyClassConsumer.php:30

ERRORS!
Tests: 1, Assertions: 2, Errors: 1.

Вы знаете причину возникновения этой ошибки и как я могу ее исправить?

...